#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
#include<cstdlib>
#define REP(i,n) for(int i=0;i<(n);i++)
using namespace std;
const char* majiang[] = { "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 Temp[35];
int card[35];
int pos(char* temp)
{
for (int i = 0; i < 34; i++)
if (strcmp(majiang[i], temp) == 0)
return i;
}
bool search(int deepth)
{
if (deepth == 4)
return true;
for (int i = 0; i < 34; i++)
{
if (card[i] >= 3)
{
card[i] -= 3;
if (search(deepth + 1))
{
return true;
}
card[i] += 3;
}
}
for (int i = 0; i < 27; i++)
{
if (card[i] >= 1 && card[i + 1] >= 1 && card[i + 2] >= 1&&i%9<=6)
{
card[i]--;
card[i + 1]--;
card[i + 2]--;
if (search(deepth + 1))
{
return true;
}
card[i]++;
card[i + 1]++;
card[i + 2]++;
}
}
return false;
}
bool check(int i)
{
card[i] -= 2;
if (search(0))
{
return true;
}
card[i] += 2;
return false;
}
int main()
{
char temp[3];
int cas = 1;
while (cin >> temp)
{
memset(card, 0, sizeof(card));
if (temp[0] == '0')
return 0;
else
card[pos(temp)]++;
for (int i = 1; i < 13; i++)
{
cin >> temp;
card[pos(temp)]++;
}
for (int i = 0; i < 34; i++)
{
Temp[i] = card[i];
}
int flag = 1;
printf("Case %d:", cas++);
for (int s = 0; s < 34; s++)
{
for (int i = 0; i < 34; i++)
card[i] = Temp[i];
if (card[s] == 4)
continue;
card[s]++;
for (int i = 0; i < 34; i++)
{
if (card[i]>=2)
{
if (check(i))
{
printf(" %s", majiang[s]);
flag = 0;
}
}
}
card[s]--;
}
if (flag)
printf(" Not ready");
printf("\n");
}
return 0;
}
UVA(11210)
最新推荐文章于 2022-03-31 20:10:33 发布