HDU 4930 Fighting the Landlords (超级暴力+读懂题意)

来源:互联网 发布:淘宝网店装修教程视频 编辑:程序博客网 时间:2024/05/22 00:14

题目链接: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#elsefreopen("E:/ZJUNIT/ACM/test/ACMtest/1010.txt","r",stdin);#endifwhile(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;}//2max1=-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;}//3max1=-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;}//4max1=-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;}


1 0