HDU - 4431 Mahjong
阿新 • • 發佈:2017-11-06
using oot 做的 image span images 技術分享 sin 其他
中華文化真是博大精深
這兩天的Dark模擬題做的我要吐了
題目大意:給你13張麻將,求再加上哪張可以胡
胡的要求有三個
1、一個對子 + 4組 3個相同的牌或者順子。 只有m、s、p是可以構成順子的。東西南北這樣的牌沒有順子。 2、7個不同的對子。 3、1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c. 這13種牌每種都有,而且僅有這13種牌。肯定是有一種2張。其他的1張。 具體思路:枚舉加那張牌,然後按題意模擬,判斷是否胡了即可 我貌似wa了一頁的樣子,原因是沒有特判某種牌>4張的情況(由於只有4副,所以某種牌>4張的情況不合法) AC代碼#include<bits/stdc++.h> usingnamespace std; int T,n,i,j,ans,answer[1000]; string str; int have[100]; int sum[100]; int num(string str) { int t=str[0]-‘1‘; if(str[1]==‘m‘)t+=0; else if(str[1]==‘s‘)t+=9; else if(str[1]==‘p‘)t+=18; else t+=27; return t; } bool ok4X3() { int ret=0,tmp[35]; for(int i=0; i<34; i++)tmp[i]=sum[i]; for(int i=0; i<=18; i+=9) for(int j=0; j<9; j++) { if(tmp[i+j]>=3)tmp[i+j]-=3,ret++; while(j+2<9&&tmp[i+j]&&tmp[i+j+1]&&tmp[i+j+2])tmp[i+j]--,tmp[i+j+1]--,tmp[i+j+2]--,ret++; } for(int j=0; j<7; j++)if(tmp[27+j]>=3)tmp[27+j]-=3,ret++; if(ret==4)return true; return false; } bool ok1() { for(int i=0; i<34; i++) { if(sum[i]>=2) { sum[i]-=2; if(ok4X3()){sum[i]+=2;return true;} sum[i]+=2; } } return false; } bool ok2() { for(int i=0; i<34; i++)if(sum[i]!=2&&(sum[i]!=0))return false; return true; } bool ok3() { for(int j=0; j<7; j++)if(sum[j+27]==0)return false; for(int i=0; i<=18; i+=9) { if(sum[i]==0||sum[i+8]==0)return false; for(int j=1; j<8; j++) if(sum[i+j]!=0)return false; } return true; } bool ok() { for (int i=0;i<=33;i++)if(sum[i]>4)return false; if(ok1()||ok2()||ok3())return true; return false; } int main() { scanf("%d",&T); while (T--) { memset(sum,0,sizeof(sum)); memset(answer,0,sizeof(answer)); ans=0; for (i=1; i<=13; i++)cin>>str,have[i]=num(str),sum[have[i]]++; for (i=0; i<=33; i++) { have[14]=i; sum[have[14]]++; if(ok()) { ans++; answer[ans]=i; } sum[have[14]]--; } if(ans) { printf("%d",ans); for (i=1; i<=ans; i++) { printf(" %d",(answer[i]%9)+1); if(answer[i]/9==0)printf("m"); else if(answer[i]/9==1)printf("s"); else if(answer[i]/9==2)printf("p"); else printf("c"); } puts(""); } else puts("Nooten"); } return 0; }
HDU - 4431 Mahjong