只需要判断一个回合就可以了,枚举判断可以一次出完所有牌或者大过对面的牌的可能,注意的是4张相同的牌带两张牌的话是可以被炸弹炸的。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <queue> #include <algorithm> #include <cstdlib> #include <iomanip> using namespace std; struct node { int k,mk; int two,mt; int three,mth; int four,mf; }a[3]; int cnt1[20]; int cnt2[20]; int main() { char s1[20]; char s2[20]; int t; scanf("%d",&t); while(t--) { memset(cnt1,0,sizeof(cnt1)); memset(cnt2,0,sizeof(cnt2)); a[1].k=0;a[1].mk=0; a[1].two=0;a[1].mt=0; a[1].three=0;a[1].mth=0; a[1].four=0;a[1].mf=0; a[2].k=0;a[2].mk=0; a[2].two=0;a[2].mt=0; a[2].three=0;a[2].mth=0; a[2].four=0;a[2].mf=0; scanf("%s",s1); scanf("%s",s2); int l1,l2; l1=strlen(s1); l2=strlen(s2); for(int i=0;s1[i]!='\0';i++) { if(s1[i]>='3'&&s1[i]<='9') { cnt1[s1[i]-'2']++; } if(s1[i]=='A') { cnt1[12]++; } if(s1[i]=='2') { cnt1[13]++; } if(s1[i]=='T') { cnt1[8]++; } if(s1[i]=='J') { cnt1[9]++; } if(s1[i]=='Q') { cnt1[10]++; } if(s1[i]=='K') { cnt1[11]++; } if(s1[i]=='X') { cnt1[14]++; } if(s1[i]=='Y') { cnt1[15]++; } } for(int i=0;s2[i]!='\0';i++) { if(s2[i]>='3'&&s2[i]<='9') { cnt2[s2[i]-'2']++; } if(s2[i]=='2') { cnt2[13]++; } if(s2[i]=='A') { cnt2[12]++; } if(s2[i]=='T') { cnt2[8]++; } if(s2[i]=='J') { cnt2[9]++; } if(s2[i]=='Q') { cnt2[10]++; } if(s2[i]=='K') { cnt2[11]++; } if(s2[i]=='X') { cnt2[14]++; } if(s2[i]=='Y') { cnt2[15]++; } } for(int i=0;i<16;i++) { if(cnt1[i]) { if(cnt1[i]==1) { a[1].k++; } a[1].mk=max(a[1].mk,i); } if(cnt1[i]==2) { a[1].two++; a[1].mt=max(a[1].mt,i); } if(cnt1[i]==3) { a[1].three++; a[1].mth=max(a[1].mth,i); } if(cnt1[i]==4) { a[1].four++; a[1].mf=max(a[1].mf,i); } } for(int i=0;i<16;i++) { if(cnt2[i]) { if(cnt2[i]==1) { a[2].k++; } a[2].mk=max(a[2].mk,i); } if(cnt2[i]==2) { a[2].two++; a[2].mt=max(a[2].mt,i); } if(cnt2[i]==3) { a[2].three++; a[2].mth=max(a[2].mth,i); } if(cnt2[i]==4) { a[2].four++; a[2].mf=max(a[2].mf,i); } } if(cnt1[14]&&cnt1[15]) { //cout<<"1"<<endl; cout<<"Yes"<<endl; continue; } if((l1==1)||(l1==2&&a[1].two==1)||(l1==3&&a[1].three==1)||(l1==4&&a[1].four==1)||(l1==4&&a[1].three==1&&a[1].k==1)) { //cout<<"4"<<endl; cout<<"Yes"<<endl; continue; } if((l1==5&&a[1].two==1&&a[1].three==1)||(l1==6&&a[1].four==1)) { //cout<<"5"<<endl; cout<<"Yes"<<endl; continue; } if(cnt2[14]&&cnt2[15]) { //cout<<"2"<<endl; cout<<"No"<<endl; continue; } if(a[1].mk>=a[2].mk&&a[2].four==0) { //cout<<"3"<<endl; cout<<"Yes"<<endl; continue; } if(a[1].two&&a[1].mt>=a[2].mt&&a[1].mt>=a[2].mth&&a[2].four==0) { //cout<<"6"<<endl; cout<<"Yes"<<endl; continue; } if(a[1].three&&(a[1].mth>=a[2].mth||(l1>=4&&l2==3)||(l1>=5&&a[1].two&&!a[2].two))&&a[2].four==0) { //cout<<"7"<<endl; cout<<"Yes"<<endl; continue; } if((a[1].four&&a[1].mf>a[2].mf)) { //cout<<"8"<<endl; cout<<"Yes"<<endl; continue; } cout<<"No"<<endl; } return 0; }
HDU-4930 Fighting the Landlords 多校训练赛斗地主,布布扣,bubuko.com
HDU-4930 Fighting the Landlords 多校训练赛斗地主
原文地址:http://blog.csdn.net/q295657451/article/details/38421853