uva 127 "Accordian" 환자 (아코디언 카드)

2578 단어 데이터 구조
창고 Stack 으로 처리 합 니 다.
제목 설명 에 따라 직접 쓰 시 면 됩 니 다.각 그룹의 데이터 마지막 스 택 더 미 를 비 우 는 것 을 잊 지 마 세 요.
제목 의 대의: 52 장의 카드 를 정 하고 지금 은 카드 를 정리 해 야 한다. 모든 카드 에 대해 왼쪽 에 있 는 세 번 째 카드 가 존재 한다 면 이 카드 가 세 번 째 카드 와 꽃 이나 카드 값 을 만족 시 키 는 지 판단 하고 만족 하면 이 카드 를 왼쪽 에 있 는 세 번 째 로 이동 시 켜 야 한다. 그렇지 않 으 면 왼쪽 에 있 는 첫 번 째 장 이 이 조건 을 만족 시 키 는 지 판단 한다.왼쪽 세 번 째 장 이 존재 하지 않 는 다 면 왼쪽 첫 번 째 장 만 판단 하면 됩 니 다.마지막 으로 남 은 카드 의 더 미 를 출력 하고 더 미 를 출력 합 니 다.
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<stack>
using namespace std;
const int maxn=52+5;
stack<string>s[maxn];

bool match(string a,string b)
{
    return (a[0]==b[0]||a[1]==b[1]);
}
int main()
{
    int n(0);
    string t;
    while(cin>>t&&t!="#")
    {
        s[n].push(t);
        n++;
        if(n>=52)
        {
            while(true)
            {
                int pos,sign;
                for(pos=0;pos<n;pos++)
                {
                    if(pos>=3&&match(s[pos].top(),s[pos-3].top()))
                    {
                        sign=1;
                        break;
                    }
                    if(pos>=1&&match(s[pos].top(),s[pos-1].top()))
                    {
                        sign=2;
                        break;
                    }
                }
                if(pos==n)
                {
                    break;
                }
                if(sign==1)
                {
                    s[pos-3].push(s[pos].top());
                }
                if(sign==2)
                {
                    s[pos-1].push(s[pos].top());

                }
                s[pos].pop();
                if(s[pos].empty())
                {
                    for(int i=pos;i<n-1;i++)
                    {
                        s[i]=s[i+1];
                    }
                    if(!s[n-1].empty())
                    {
                        s[n-1].pop();
                    }
                    n--;
                }
            }
            printf("%d ",n);
            printf("piles remaining:");
            for(int i=0;i<n;i++)
            {
                printf(" %d",s[i].size());
            }
            printf("
"); for(int i=0;i<n;i++) { while(!s[i].empty()) { s[i].pop(); } } n=0; } } return 0; }

단순 데이터 구조.

좋은 웹페이지 즐겨찾기