题意:太长自己看()
题解:纯粹的大模拟。我们可以对于双反的手牌用分数来赋值,然后进行判断。
这种题通常不涉及多少算法,但一般比较难写,而且存在许多细节需要注意。
AcCode:
#include<bits/stdc++.h>
using namespace std;
int value(string s){
int cnt[15],val[15],a[5],sum=0,total=0;
memset(cnt,0,sizeof(cnt));
for(int i=0;i<=4;i++){
if(s[i]=='A') {cnt[1]++;a[i]=1;}
if(s[i]=='2') {cnt[2]++;a[i]=2;}
if(s[i]=='3') {cnt[3]++;a[i]=3;}
if(s[i]=='4') {cnt[4]++;a[i]=4;}
if(s[i]=='5') {cnt[5]++;a[i]=5;}
if(s[i]=='6') {cnt[6]++;a[i]=6;}
if(s[i]=='7') {cnt[7]++;a[i]=7;}
if(s[i]=='8') {cnt[8]++;a[i]=8;}
if(s[i]=='9') {cnt[9]++;a[i]=9;}
if(s[i]=='T') {cnt[10]++;a[i]=10;}
if(s[i]=='J') {cnt[11]++;a[i]=10;}
if(s[i]=='Q') {cnt[12]++;a[i]=10;}
if(s[i]=='K') {cnt[13]++;a[i]=10;}
}
for(int i=1;i<=13;i++) if(cnt[i]==4) return 150;
for(int i=0;i<=4;i++) sum=sum+a[i];
if(sum<=10) return 140; sum=0;
for(int i=11;i<=13;i++) total+=cnt[i];
if(total==5) return 130; total=0;
for(int i=10;i<=13;i++) total+=cnt[i];
if(total==5) return 120;
for(int i=0;i<=4;i++) sum+=a[i];
for(int i=0;i<=4;i++) {
for(int j=i+1;j<=4;j++){
for(int k=j+1;k<=4;k++){
if((a[i]+a[j]+a[k])%10==0){
if(sum%10==0) return 110;
else return sum%10+100;
}
}
}
}
for(int i=13;i>=1;i--) if(cnt[i]!=0) return i;
return 0;
}
int main(){
int t;
string s1,s2;
cin>>t;
for(int i=1;i<=t;i++){
cin>>s1>>s2;
if(value(s1)>value(s2)) cout<<"HGZnb!!!"<<endl;
if(value(s1)==value(s2)) cout<<"So boring"<<endl;
if(value(s1)<value(s2)) cout<<"What a dish"<<endl;
}
return 0;
}