题目链接:HDU 4930 Fighting the Landlords
斗地主!!。不会玩这游戏,真是苦逼。题意其他都还好,就是要注意只要第一个回合1号玩家能压制2号玩家就算赢了(突破点)。
其他就分类暴力了,思路还是比较清晰的。
注意点:
1.对方炸弹,必输
2.一回合就出完牌,必胜
AC代码:
#include<stdio.h> #include<string.h> int vis1[30],vis2[30]; int find(char s) { if(s=='T') return 10; else if(s=='J') return 11; else if(s=='Q') return 12; else if(s=='K') return 13; else if(s=='A') return 14; else if(s=='2') return 15; else if(s=='X') return 16; else if(s=='Y') return 17; else if(s>='3' && s<='9') return s-'0'; } int main() { int t,i,j; char s1[20],s2[20]; int len1,len2; #ifdef ONLINE_JUDGE #else freopen("E:/ZJUNIT/ACM/test/ACMtest/1010.txt","r",stdin); #endif while(scanf("%d",&t)!=EOF) { while(t--) { memset(vis1,0,sizeof vis1); memset(vis2,0,sizeof vis2); scanf("%s",s1); scanf("%s",s2); //printf("%s\n",s1); //printf("%s\n",s2); len1=strlen(s1); for(i=0;i<len1;i++) vis1[find(s1[i])]++; len2=strlen(s2); for(i=0;i<len2;i++) vis2[find(s2[i])]++; int mark=0,count=0; // int a=0,b=0,c=0,d=0; int e=0,f=0,orz=0; if(vis1[16]!=0 && vis1[17]!=0) e++; if(vis2[16]!=0 && vis2[17]!=0) f++; for(i=0;i<20;i++) { if(vis1[i]>0) { if(vis1[i]==1) a++; if(vis1[i]==2) b++; if(vis1[i]==3) c++; if(vis1[i]==4) d++; } if(vis2[i]==4) orz++; } //王炸 if(e==1) { printf("Yes\n"); continue; } //一次出完 a是1张牌。b是2张牌,c是3张牌,d是4张牌 if(len1==1) { printf("Yes\n"); continue; } if(len1==2 && b==1) { printf("Yes\n"); continue; } if((len1==3 && c==1) || (len1==4 && c==1 && a==1) || (len1==5 && c==1 && b==1) || (len1==5 && c==1 && a==2)) { printf("Yes\n"); continue; } if((len1==4 && d==1) ||(len1==6 && d==1 && b==1) || (len1==6 && d==1 && a==2)) { printf("Yes\n"); continue; } if(f==1 || orz!=0)//对手有炸弹 { printf("No\n"); continue; } int max1=-1,max2=0; for(i=0;i<20;i++) { if(vis1[i]>=1 && max1<i) max1=i; if(vis2[i]>=1 && max2<i) max2=i; } if(max1>=max2) { printf("Yes\n"); continue; } //2 max1=-1,max2=0; for(i=0;i<20;i++) { if(vis1[i]>=2 && max1<i) max1=i; if(vis2[i]>=2 && max2<i) max2=i; } if(max1>=max2) { printf("Yes\n"); continue; } //3 max1=-1,max2=0; for(i=0;i<20;i++) { if(vis1[i]>=3 && max1<i) max1=i; if(vis2[i]>=3 && max2<i) max2=i; } if(max1>=max2) { printf("Yes\n"); continue; } //4 max1=-1,max2=0; for(i=0;i<20;i++) { if(vis1[i]>=4 && max1<i) max1=i; if(vis2[i]>=4 && max2<i) max2=i; } if(max1>=max2) { printf("Yes\n"); continue; } printf("No\n"); } } return 0; }
HDU 4930 Fighting the Landlords (超级暴力+读懂题意)
时间: 2024-11-03 22:11:12