首页 > 代码库 > UVa127,"Accordian" Patience
UVa127,"Accordian" Patience
注意1堆的时候,pile后面没有s!!!!因为这个WA了一次,否则就1A了
犯了一个很幼稚很幼稚的错误,申请ans[]后玩了吧ans置0,结果调了好长好长时间,本来是敲完就能过的T T啊啊啊啊啊啊,一个多小时没了啊
附上我调试时写的代码(把每一次运转都输出了= =一个一个看的,真心用了好长时间,头都大了)
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <stack>#define maxn 100using namespace std;struct Node{ int suit,rank; //friend ostream& operator<<(ostream& cout,const Point& Node);};stack<Node> s[53];int init(){ for (int i=0;i<53;i++) while (!s[i].empty()) s[i].pop(); char ch1,ch2; cin>>ch1; if (ch1==‘#‘) return 0; cin>>ch2; Node u; if (isalpha(ch1)) switch (ch1){ case ‘A‘:u.rank=1;break; case ‘T‘:u.rank=10;break; case ‘J‘:u.rank=11;break; case ‘Q‘:u.rank=12;break; case ‘K‘:u.rank=13;break; } else u.rank=ch1-‘0‘; switch (ch2){ case ‘C‘:u.suit=1;break; case ‘D‘:u.suit=2;break; case ‘H‘:u.suit=3;break; case ‘S‘:u.suit=4;break; } s[1].push(u); for (int i=2;i<=52;i++){ cin>>ch1>>ch2; if (isalpha(ch1)) switch (ch1){ case ‘A‘:u.rank=1;break; case ‘T‘:u.rank=10;break; case ‘J‘:u.rank=11;break; case ‘Q‘:u.rank=12;break; case ‘K‘:u.rank=13;break; } else u.rank=ch1-‘0‘; switch (ch2){ case ‘C‘:u.suit=1;break; case ‘D‘:u.suit=2;break; case ‘H‘:u.suit=3;break; case ‘S‘:u.suit=4;break; } s[i].push(u); }}int match(Node a,Node b){ if (a.suit==b.suit||a.rank==b.rank) return 1; return 0;}ostream& operator<<(ostream& cout,const Node& p) { cout<<p.rank<<(char)(p.suit+‘B‘)<<" ";}int tot(){ int t=0; for (int i=1;i<=52;i++) t+=s[i].size(); cout<<" "<<t;}int main(){ while (init()){ int i=2,k,j; while(i<=52){ if (s[i].empty()){ i++; continue; } k=i,j=0; while (k>=1&&j<3) {k--;if(!s[k].empty()) j++;} if(j==3) if(match(s[k].top(),s[i].top())){ //cout<<s[i].top()<<"->"<<s[k].top(); s[k].push(s[i].top()); s[i].pop(); //cout<<" "<<s[k].top(); //tot();cout<<endl; i=k; continue; } k=i;j=0; while (k>=1&&j<1){k--;if(!s[k].empty()) j++;} if(j==1)if(match(s[k].top(),s[i].top())){ //cout<<s[i].top()<<"->"<<s[k].top(); s[k].push(s[i].top()); s[i].pop(); //cout<<" "<<s[k].top(); //tot();cout<<endl; i=k; continue; } i++; } int ans[100],top=0; memset(ans,0,sizeof(ans)); for (i=1;i<=52;i++) if (s[i].size()!=0){ top++; ans[top]=s[i].size(); } if (top==1)cout<<top<<" pile remaining:"; else cout<<top<<" piles remaining:"; for (i=1;i<=top;i++) cout<<" "<<ans[i]; cout<<endl; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。