uva 127 "Accordian" Patience

来源:互联网 发布:物理地址和mac地址 编辑:程序博客网 时间:2024/04/28 01:47

模拟牌移动的过程就行了,注意要使用嵌套的stl库里面的对象list< stack<struct node> >,注意输出的时候pile和piles的区别。

#include <stdio.h>#include <list>#include <stack>using namespace std;struct node{char value;char color;};list< stack<struct node> > l;void func(){list< stack<struct node> >::iterator it_cur, it_pre;bool f;struct node n;while(1){f = false;for(it_cur=++l.begin(); it_cur!=l.end(); it_cur++){it_pre = it_cur;it_pre --;if(it_pre== l.begin())goto l1;it_pre --;if(it_pre== l.begin())goto l1;it_pre --;if(it_cur->top().value==it_pre->top().value || it_cur->top().color==it_pre->top().color){n.value = it_cur->top().value;n.color = it_cur->top().color;it_pre->push(n);it_cur->pop();if(it_cur->size() == 0)l.erase(it_cur);f = true;break;}l1:it_pre = it_cur;it_pre --;if(it_cur->top().value==it_pre->top().value || it_cur->top().color==it_pre->top().color){n.value = it_cur->top().value;n.color = it_cur->top().color;it_pre->push(n);it_cur->pop();if(it_cur->size() == 0)l.erase(it_cur);f = true;break;}}if(!f)break;}if(l.size() >= 2)printf("%d piles remaining:", l.size());elseprintf("1 pile remaining:");for(it_cur=l.begin(); it_cur!=l.end(); it_cur++){printf(" %d", it_cur->size());}printf("\n");}int main(void){char v, c;int i;char temp;struct node n;stack<struct node> s;list<struct node>::iterator it;//FILE* file = fopen("input.dat", "r");while(1){l.clear();for(i=1; i<=52; i++){fscanf(stdin, "%c", &v);fscanf(stdin, "%c", &c);if(v == '#')goto end;fscanf(stdin, "%c", &temp);n.value = v;n.color = c;while(!s.empty()) s.pop();s.push(n);l.push_back(s);}func();/*for(it=l.begin(); it!=l.end(); it++)printf("%c%c ", it->value, it->color);printf("\n");*/}end:return 0;}


原创粉丝点击