11210

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>

using namespace std;

const char* mahjong[]={
    "1T","2T","3T","4T","5T","6T","7T","8T","9T",
    "1S","2S","3S","4S","5S","6S","7S","8S","9S",
    "1W","2W","3W","4W","5W","6W","7W","8W","9W",
    "DONG","NAN","XI","BEI",
    "ZHONG","FA","BAI"
};

int cnt[34];

int ID(char *name){
    for(int i = 0; i < 34; i++){
	    if(strcmp(mahjong[i], name)==0) return i;
	}
	return -1;
}

bool work_ks(int dep){
    for(int i = 0; i < 34; i++)
        if(cnt[i] >= 3){
		    if(dep == 3) return true;
		    cnt[i] -= 3;
		    if(work_ks(dep+1)) return true;
		    cnt[i] += 3;
		}
	for(int i = 0; i <= 24; i++)
	    if(i%9<=6 && cnt[i]>=1 && cnt[i+1]>=1 && cnt[i+2]>=1){
		    if(dep == 3) return true;
		    
			cnt[i]--; cnt[i+1]--; cnt[i+2]--;
		    if(work_ks(dep+1)) return true;
		    cnt[i]++; cnt[i+1]++; cnt[i+2]++;
		}
	return false;
}
bool work_j(){
    for(int i = 0; i < 34; i++){
	    if(cnt[i] >= 2){
		    cnt[i] -= 2;
		    if(work_ks(0))  return true;
		    cnt[i] += 2;
		}
	}
	return false;
}
int main(){
	char s[100];
	int t = 0;
	int mj[30];
	
	while(scanf("%s",&s) == 1){
		if(s[0] == '0') break;
	    
	    mj[0] = ID(s);
	    for(int i = 1; i < 13; i++){
		    scanf("%s",&s);
		    mj[i] = ID(s);
		}
		
		printf("Case %d:",++t);
		
		bool ok = false;
		for(int i = 0; i < 34; i++){
		    memset(cnt, 0, sizeof(cnt));
		    
		    for(int j = 0; j < 13; j++) cnt[mj[j]]++;
		    if(cnt[i] >= 4) continue;
		    cnt[i]++;
		    if(work_j()){
			    ok=true;
			    printf(" %s",mahjong[i]);
			}
			cnt[i]--;
		}
		
		if(!ok) printf(" Not ready");
		printf("\n");
	}
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值