hdu4930 模拟斗地主
生活随笔
收集整理的這篇文章主要介紹了
hdu4930 模拟斗地主
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? ?模擬斗地主,出牌有一下規則,1張,1對,3張,3帶1,3帶2,炸彈(包括兩個貓),4帶2,這寫規則,沒有其他的,然后給你兩幅牌,只要第一個人出了一次牌對方管不上,那么或者第一個人一次把牌都出光了,就算勝利,否則第一個人失敗,記住,只出一次牌。
思路:
? ? ? ?模擬斗地主,出牌有一下規則,1張,1對,3張,3帶1,3帶2,炸彈(包括兩個貓),4帶2,這寫規則,沒有其他的,然后給你兩幅牌,只要第一個人出了一次牌對方管不上,那么或者第一個人一次把牌都出光了,就算勝利,否則第一個人失敗,記住,只出一次牌。
思路:
? ? ? ?把所有的狀態都模擬,每次都找出當前狀態的最大值,如果對方管不上,那么就贏了,其他的就是注意點細節,比如大貓和小貓,還有就是炸彈什么的,今天做了一下午這個題目,敲了很多便都wa了,后來查出來竟然是自己不了解規則,我之前一直以為4帶2必須用4帶2去管,不能炸,結果今天問了他們才知道,4帶2已經不是炸彈了,可以直接隨便拿一個炸彈炸了,哎!斗地主都不會玩,顏面何存啊!
#include<stdio.h> #include<string.h> int k1[500] ,k2[500]; int pai[20]; char str1[25] ,str2[25];void ini() {pai[1] = 'Y' ,pai[2] = 'X' ,pai[3] = '2' ,pai[4] = 'A' ,pai[5] = 'K';pai[6] = 'Q' ,pai[7] = 'J' ,pai[8] = 'T' ,pai[9] = '9' ,pai[10] = '8';pai[11] = '7' ,pai[12] = '6' ,pai[13] = '5' ,pai[14] = '4' ,pai[15] = '3'; }int main () {ini();int t ,l1 ,l2 ,ok ,A ,XY ,i ,j ,Z;scanf("%d" ,&t);while(t--){scanf("%s" ,str1) ,scanf("%s" ,str2);l1 = strlen(str1) ,l2 = strlen(str2);memset(k1 ,0 ,sizeof(k1));memset(k2 ,0 ,sizeof(k2));for(i = 0 ;i < l1 ;i ++)k1[str1[i]] ++;for(i = 0 ;i < l2 ;i ++)k2[str2[i]] ++;if(k1['X'] && k1['Y']){puts("Yes");continue;}k2['X'] && k2['Y'] ? XY = Z = 1 : XY = 0;ok = Z = A = 0;for(i = 1 ;i <= 15 ;i ++)if(k2[pai[i]] >= 4) Z = 1;// 1 for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 1){if(l1 == 1) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 1) tmp = 1;if(!tmp && !Z) ok = 1;break;}}// 2 for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 2){if(l1 == 2) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 2) tmp = 1;if(!tmp && !Z) ok = 1;break;}}//3 for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 3){if(l1 == 3) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 3) tmp = 1;if(!tmp && !Z) ok = 1;break;}}//3-1 for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 3 && l1 >= 4){if(l1 == 4) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 3 && l2 >= 4) tmp = 1;if(!tmp && !Z) ok = 1;break;}}//3-2 int tt1 = 0 ,tt2 = 0;for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 2) tt1 ++;if(k2[pai[i]] >= 2) tt2 ++;}for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 3 && tt1 >= 2){if(l1 == 5) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 3 && tt2 >= 2) tmp = 1;if(!tmp && !Z) ok = 1;break;}} //4 for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 4){if(l1 == 4) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 4) tmp = 1;if(!tmp) ok = 1;}}//4-2 for(i = 1 ;i <= 15 ;i ++){if(k1[pai[i]] >= 4 && l1 >= 6){if(l1 == 6) A = 1;int tmp = 0;for(j = 1 ;j < i ;j ++)if(k2[pai[j]] >= 4 && l2 >= 6) tmp = 1;if(!tmp && !Z) ok = 1;break;}}if(A) ok = 1;if(!A && XY) ok = 0;ok ? puts("Yes") : puts("No");}return 0; }
總結
以上是生活随笔為你收集整理的hdu4930 模拟斗地主的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu4923 f(A,B)分段处理
- 下一篇: hdu4915 判断括号匹配