Uva Accordian Patience

来源:互联网 发布:java服务器端开发教程 编辑:程序博客网 时间:2024/05/16 05:21
这个题确实让我恶心到了,搞了两天,各种TLE,蛋碎,学C++以来第一次用STL ,就当是熟悉一下吧,不过codeblocks的提示确实是有些问题。。。
思路:直接模拟,每次移动之后一定要从头开始才能确保按顺序移动,直接模拟一定要用scanf输入,这很关键....
基本上算是卡着时间AC的
这个题确实让我恶心到了,搞了两天,各种TLE,蛋碎,学C++以来第一次用STL ,就当是熟悉一下吧,不过codeblocks的提示确实是有些问题。。。思路:直接模拟,每次移动之后一定要从头开始才能确保按顺序移动,直接模拟一定要用scanf输入,这很关键....基本上算是卡着时间AC的#include <iostream>#include <cstring>#include <vector>#include <stack>#include <cstdio>using namespace std;struct Card{    char x,y;}; bool ismove(const Card a,const Card b){    if(a.x == b.x || a.y == b.y)        return true;    return false;}int main(){    vector<stack<Card> > cards;    char s1,s2;    while(scanf(" %c%c",&s1,&s2) && s1!='#')    {        Card cad;        cad.x=s1;        cad.y=s2;        stack<Card> temp;        temp.push(cad);        cards.push_back(temp);        if(cards.size()==52)        {            while(true)            {                int pos;                for(pos=0;pos!=cards.size();++pos)                {                    if(pos>2 && ismove(cards[pos].top(),cards[pos-3].top()))                    {                        cards[pos-3].push(cards[pos].top());                        cards[pos].pop();                        break;                    }                    if(pos>0 && ismove(cards[pos].top(),cards[pos-1].top()))                    {                        cards[pos-1].push(cards[pos].top());                        cards[pos].pop();                        break;                    }                }                if(pos==cards.size())                    break;                if(cards[pos].empty())                {                    cards.erase(cards.begin()+pos);                }            }            if(cards.size()==1)                printf("%d pile remaining:",cards.size());            else                printf("%d piles remaining:",cards.size());            for(int i=0;i<cards.size();++i)            {                printf(" %d",cards[i].size());            }            printf("\n");            cards.clear();        }    }    return 0;}