水题,但是忘了清空队列结果就悲剧了。
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <map>
using namespace std;
struct Card{
char num;
int determin;
};
struct cmp
{
bool operator ()(Card a,Card b){
if(a.num-b.num==0){
return a.determin>b.determin;
}
else{
return a.num>b.num;
}
}
};
int main()
{
int n;
priority_queue<Card,vector<Card>,cmp>A;
priority_queue<Card,vector<Card>,cmp>E;
scanf("%d",&n);
map<char,int> mmp;
mmp['C']=1;
mmp['D']=2;
mmp['S']=3;
mmp['H']=4;
while(n--){
int m,cm;
Card s[100],cs[100];
scanf("%d",&m);
cm=m;
int counter=0;
int point=0;
while(m--){
cin>>s[counter].num;
if(s[counter].num=='A'){ s[counter].num='f';}
if(s[counter].num=='T') {s[counter].num='b';}
if(s[counter].num=='J') {s[counter].num='c';}
if(s[counter].num=='Q') {s[counter].num='d';}
if(s[counter].num=='K') {s[counter].num='e';}
char str;
cin>>str;
s[counter].determin=mmp[str];
A.push(s[counter]);
counter++;
}
counter=0;
while(cm--)
{
char str;
cin>>cs[counter].num;
if(cs[counter].num=='A') {cs[counter].num='f';}
if(cs[counter].num=='T') {cs[counter].num='b';}
if(cs[counter].num=='J') {cs[counter].num='c';}
if(cs[counter].num=='Q') {cs[counter].num='d';}
if(cs[counter].num=='K') {cs[counter].num='e';}
cin>>str;
cs[counter].determin=mmp[str];
E.push(cs[counter]);
counter++;
}
while(!E.empty() && !A.empty()){
Card r,t;
r=E.top();
E.pop();
t=A.top();
if(r.num==t.num){
if(r.determin>=t.determin){
point++;
A.pop();
}
}
else if(r.num>t.num){
point++;
A.pop();
}
}
printf("%d\n",point);
while(!A.empty()) A.pop();
while(!E.empty()) E.pop();
}
return 0;
}