#include<bits/stdc++.h>
using namespace std;
int cnt[50],t[50];
int judge1()
{
for(int i=0;i<34;i++)
{
if(cnt[i]==2||cnt[i]==0) ;
else return 0;
}
return 1;
}
int judge2()
{
int sum=0;
if(cnt[0]&&cnt[8]&&cnt[9]&&cnt[17]&&cnt[18]&&cnt[26])
{
sum=cnt[0]+cnt[8]+cnt[9]+cnt[17]+cnt[18]+cnt[26];
}
else return 0;
for(int i=0;i<7;i++)
{
if(cnt[27+i]) sum+=cnt[27+i];
else return 0;
}
if(sum==14)return 1;
else return 0;
}
int judge4()
{
int i,j,sum=0;
for(i=0;i<34;i++)
t[i]=cnt[i];
for(i=0;i<=18;i+=9)
for(j=0;j<9;j++)
{
if(t[i+j]>=3)
{
t[i+j]-=3;
sum++;
}
while(j+2<9&&t[i+j]&&t[i+j+1]&&t[i+j+2])
{
sum++;
t[i+j]--;
t[i+j+1]--;
t[i+j+2]--;
}
}
for(i=0;i<7;i++)
if(t[i+27]>=3)
{
t[i+27]-=3;
sum++;
}
if(sum==4) return 1;
else return 0;
}
int judge3()
{
int i;
for(i=0;i<34;i++)
{
if(cnt[i]>=2)
{
cnt[i]-=2;
if(judge4())
{
cnt[i]+=2;
return 1;
}
cnt[i]+=2;
}
}
return 0;
}
int judge()
{
if(judge1()||judge2()||judge3())
return 1;
else
return 0;
}
int main()
{
int _,i,t,use[50],ans;
char c;
scanf("%d",&_);
while(_--)
{
ans=0;
memset(cnt,0,sizeof(cnt));
memset(use,0,sizeof(use));
for(i=0;i<13;i++)
{
scanf("%d%c",&t,&c);
t--;
if(c=='m') t+=0;
else if(c=='s') t+=9;
else if(c=='p') t+=18;
else if(c=='c') t+=27;
cnt[t]++;
}
for(i=0;i<34;i++)
{
cnt[i]++;
if(cnt[i]<=4&&judge())
{
ans++;
use[i]=1;
}
cnt[i]--;
}
if(ans)
{
printf("%d",ans);
for(i=0;i<34;i++)
{
if(use[i]==0) continue;
t=i%9;
if(i/9==0) printf(" %dm",t+1);
else if(i/9==1) printf(" %ds",t+1);
else if(i/9==2) printf(" %dp",t+1);
else printf(" %dc",t+1);
}
printf("\n");
}
else printf("Nooten\n");
}
return 0;
}
hdu 4431 Mahjong 模拟
最新推荐文章于 2018-04-29 21:44:44 发布