题目有点长,对于样例最好拿张A4纸模拟写一遍。

可以发现程序一定不会死循环,因为每种牌都是4张,而死循环的条件是某种牌有5张然后你拿了又放进去。如果写出来死循环了,那就是写不对了。

有几点可能是需要注意的:

1.A牌就是1,不要把A写成11,然后发现一共56张牌怎么回事。。

2.最好再开个变量nxt记录下一张拿到的牌,只用一个变量记录当前的牌很容易写错又发现不出来。

3.最后统计多少对就是一共有多少牌翻了4次

虽然写了一个早上但幸好是1A,贡献了自己1S~

代码如下:

#include <iostream>
#include <queue>
using namespace std;
typedef long long ll; deque<char> que[];
char now,nxt;
int vis[][],k,hath[];
void print()
{
for(int i=;i<=;++i){
for(int j=;j<;++j)
cout<<que[i][j]<<' ';
cout<<endl;
}
cout<<"******"<<endl;
}
int main() {
for(int i=; i<=; ++i)
for(int j=; j<; ++j) {
char x;
cin>>x;
que[i].push_back(x);
}
while(k<) {
now=que[][k];
nxt='^';
while(now!='K') {
//vis[now-'0'][now-'0']=1;
//cout<<now<<' '<<nxt<<endl;
switch(now) {
case 'A':
que[].push_front(now);
hath[]++;
nxt=que[].back();
que[].pop_back();
break;
case 'J':
que[].push_front(now);
hath[]++;
nxt=que[].back();
que[].pop_back();
break;
case 'Q':
que[].push_front(now);
hath[]++;
nxt=que[].back();
que[].pop_back();
break; case '':
que[].push_front(now);
hath[]++;
nxt=que[].back();
que[].pop_back();
break;
default:
que[now-''].push_front(now);
hath[now-'']++;
nxt=que[now-''].back();
que[now-''].pop_back();
break;
}
now=nxt;
}
//cout<<"***"<<k+1<<endl;
//print();
++k;
}
int ans=;
for(int i=;i<=;++i)
ans+=hath[i]==;
cout<<ans<<endl; return ;
}
05-11 13:12