显示原始代码
#include <bits/stdc++.h>
using namespace std;
bool check2(int *t, int k) {
if (k == 0)
return true;
for (int i = 0; i <= 6; i++) {
if (t[i] > 0 && t[i + 1] > 0 && t[i + 2] > 0) {
t[i]--;
t[i + 1]--;
t[i + 2]--;
bool flag = check2(t, k - 1);
t[i]++;
t[i + 1]++;
t[i + 2]++;
if (flag)
return true;
}
}
for (int i = 9; i <= 15; i++) {
if (t[i] > 0 && t[i + 1] > 0 && t[i + 2] > 0) {
t[i]--;
t[i + 1]--;
t[i + 2]--;
bool flag = check2(t, k - 1);
t[i]++;
t[i + 1]++;
t[i + 2]++;
if (flag)
return true;
}
}
for (int i = 18; i <= 24; i++) {
if (t[i] > 0 && t[i + 1] > 0 && t[i + 2] > 0) {
t[i]--;
t[i + 1]--;
t[i + 2]--;
bool flag = check2(t, k - 1);
t[i]++;
t[i + 1]++;
t[i + 2]++;
if (flag)
return true;
}
}
for (int i = 0; i < 34; i++) {
if (t[i] >= 3) {
t[i] -= 3;
bool flag = check2(t, k - 1);
t[i] += 3;
if (flag)
return true;
}
}
return false;
}
bool check1(int *t) {
for (int i = 0; i < 34; i++) {
if (t[i] >= 2) {
t[i] -= 2;
bool flag = check2(t, 4);
t[i] += 2;
if (flag)
return true;
}
}
return false;
}
void print(int x) {
if (x >= 0 && x < 9)
cout << x + 1 << "m ";
if (x >= 9 && x < 18)
cout << x - 8 << "s ";
if (x >= 18 && x < 27)
cout << x - 17 << "p ";
if (x >= 27 && x < 34)
cout << x - 26 << "z ";
}
int main() {
int T;
cin >> T;
while (T--) {
string s;
cin >> s;
int t[34] = {};
for (int i = 0; i < 14; i++) {
int tmp = 0;
if (s[2 * i + 1] == 's')
tmp = 9;
if (s[2 * i + 1] == 'p')
tmp = 18;
if (s[2 * i + 1] == 'z')
tmp = 27;
t[s[2 * i] - '1' + tmp]++;
}
if (check1(t)) {
cout << "Tsumo!" << endl;
continue;
}
int k = 0, a[34][34] = {};
for (int i = 0; i < 34; i++) {
if (t[i] > 0) {
t[i]--;
for (int j = 0; j < 34; j++) {
t[j]++;
if (check1(t) == true)
a[i][j] = 1;
t[j]--;
}
t[i]++;
}
}
for (int i = 0; i < 34; i++) {
for (int j = 0; j < 34; j++)
if (a[i][j] == 1) {
k++;
break;
}
}
cout << k << endl;
bool dc[34] = {};
for (int i = 0; i < 34; i++) {
for (int j = 0; j < 34; j++) {
if (a[i][j] == 1) {
if (dc[i] == 0) {
print(i);
dc[i] = 1;
}
print(j);
}
}
if (dc[i] == 1)
cout << endl;
}
}
}