您的位置:首页 > 其它

UVa127,"Accordian" Patience

2014-07-29 09:44 351 查看
注意1堆的时候,pile后面没有s!!!!因为这个WA了一次,否则就1A了

犯了一个很幼稚很幼稚的错误,申请ans[]后玩了吧ans置0,结果调了好长好长时间,本来是敲完就能过的T T啊啊啊啊啊啊,一个多小时没了啊

附上我调试时写的代码(把每一次运转都输出了= =一个一个看的,真心用了好长时间,头都大了)

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#define maxn 100
using 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;
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: