编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#66863 #1324. [L2-3]一步之遥 Accepted 100 17 ms 348 K C++ 11 / 4.3 K yyf_0404 2022-03-25 12:10:57
显示原始代码
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
int record[4][10];
map<char, int> num;
const char type[] = "mspz";
int ans[40][40], cnt[40];
bool check_line(int x) {
    bool result = 0;
    if (record[x][0] == 0)
        return 1;
    for (int i = 1; i <= 9; i++)
        if (record[x][i] >= 3) {
            record[x][i] -= 3;
            record[x][0] -= 3;
            result = check_line(x);
            record[x][i] += 3;
            record[x][0] += 3;
            if (result)
                return 1;
        }
    if (x != 3)
        for (int i = 1; i <= 7; i++)
            if (record[x][i] > 0 && record[x][i + 1] > 0 && record[x][i + 2] > 0) {
                record[x][i]--;
                record[x][i + 1]--;
                record[x][i + 2]--;
                record[x][0] -= 3;
                result = check_line(x);
                record[x][i]++;
                record[x][i + 1]++;
                record[x][i + 2]++;
                record[x][0] += 3;
                if (result)
                    return 1;
            }
    return 0;
}
bool check() {
    int mian = 0, dui = 0;
    bool result;
    for (int i = 0; i < 4; i++) {
        result = 0;
        if (record[i][0] % 3 == 1)
            return 0;
        else if (record[i][0] % 3 == 0) {
            if (!check_line(i))
                return 0;
            else
                mian += record[i][0] / 3;
        } else {
            for (int j = 1; j <= 9; j++)
                if (record[i][j] >= 2) {
                    record[i][j] -= 2;
                    record[i][0] -= 2;
                    result = check_line(i);
                    record[i][j] += 2;
                    record[i][0] += 2;
                    if (result) {
                        dui++;
                        mian += record[i][0] / 3;
                        break;
                    }
                }
            if (!result)
                return 0;
        }
    }
    if (mian == 4 && dui == 1)
        return 1;
    else
        return 0;
}
int main() {
    int t;
    string s;
    num['m'] = 0;
    num['s'] = 1;
    num['p'] = 2;
    num['z'] = 3;
    scanf("%d", &t);
    while (t--) {
        memset(record, 0, sizeof(record));
        memset(ans, 0, sizeof(ans));
        memset(cnt, 0, sizeof(cnt));
        cin >> s;
        for (int i = 0; i < 14; i++) {
            record[num[s[2 * i + 1]]][s[2 * i] - '0']++;
            record[num[s[2 * i + 1]]][0]++;
        }
        if (check())
            printf("Tsumo!\n");
        else {
            int tot = 0;
            bool result;
            for (int i = 0; i < 4; i++)
                for (int j = 1; j <= 9; j++)
                    if (record[i][j]) {
                        int x = i * 10 + j;
                        record[i][j]--;
                        record[i][0]--;
                        for (int r = 0; r < 4; r++)
                            for (int c = 1; c <= (r == 3 ? 7 : 9); c++) {
                                int y = r * 10 + c;
                                record[r][c]++;
                                record[r][0]++;
                                result = check();
                                record[r][c]--;
                                record[r][0]--;
                                if (result) {
                                    if (!cnt[x])
                                        tot++;
                                    ans[x][y] = 1;
                                    cnt[x]++;
                                }
                            }
                        record[i][j]++;
                        record[i][0]++;
                    }
            printf("%d\n", tot);
            for (int i = 0; i < 40; i++) {
                if (cnt[i]) {
                    printf("%d%c ", i % 10, type[i / 10]);
                    for (int j = 0; j < 40; j++)
                        if (ans[i][j])
                            printf("%d%c ", j % 10, type[j / 10]);
                    printf("\n");
                }
            }
        }
    }
    return 0;
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:3 ms
内存:348 KiB

输入文件(1.in

6
1m1m1m2m3m4m5m6m7m8m9m9m9m1s
2m3m4m4m4m4m5m6m7m8m9m9m9m1p
2m3m4m4m4m4m5m6m6m6m6m7m8m1z
1m2m3m4
<83 bytes omitted>

答案文件(1.out

4
2m 1s
5m 1s
8m 1s
1s 1m 2m 3m 4m 5m 6m 7m 8m 9m
4
2m 1p
5m 1p
8m 1p
1p 1m 2m 3m 4m 5m 6m 
<125 bytes omitted>

用户输出

4
2m 1s 
5m 1s 
8m 1s 
1s 1m 2m 3m 4m 5m 6m 7m 8m 9m 
4
2m 1p 
5m 1p 
8m 1p 
1p 1m 2m 3m 4m 5m 6m 7m 8m 9m 
4
2m 1z 
5m 1z 
8m 1
<93 bytes omitted>

系统信息

Exited with return code 0
测试点 #2
Accepted
得分:100
用时:3 ms
内存:348 KiB

输入文件(2.in

10
7z7z7z2z2z3z3z4z1s2s3s4s5s6s
2p3p5p6p6p6p6p7p3s3s3s5s6s7s
4m5m6m2p2p5p6p7p7p8p8p2s3s4s
2p3p3p
<204 bytes omitted>

答案文件(2.out

1
4z 2z 3z
4
3s 1p 4p
2p 3p
3p 2p
6p 1p 4p 
3
5p 6p 9p
7p 2p 8p
8p 6p 9p
3
3s 4s
4s 3s
<119 bytes omitted>

用户输出

1
4z 2z 3z 
4
3s 1p 4p 
2p 3p 
3p 2p 
6p 1p 4p 
3
5p 6p 9p 
7p 2p 8p 
8p 6p 9p 
3
3s 4s 
4s 3s 
3z 2s 5s 
Tsumo!
2
1z 2z 
2z 1z 
<80 bytes omitted>

系统信息

Exited with return code 0
测试点 #3
Accepted
得分:100
用时:2 ms
内存:268 KiB

输入文件(3.in

10
5p6p7p8p9p4p4p4p2p2p2p6p6p6p
5m6m4s4s4s6s6s6s6z6z6z2p3p4p
2z2z2z3z3z6s7s8s5m6m7m3s3s3s
4p5p6p
<202 bytes omitted>

答案文件(3.out

Tsumo!
5
5m 6m
6m 5m 
4s 4m 7m
6s 4m 7m
6z 4m 7m
Tsumo!
Tsumo!
3
1s 6s
4s 6s 
7s 3s 6s

<87 bytes omitted>

用户输出

Tsumo!
5
5m 6m 
6m 5m 
4s 4m 7m 
6s 4m 7m 
6z 4m 7m 
Tsumo!
Tsumo!
3
1s 6s 
4s 6s 
7s 3s 6s 
Tsumo!
3
6m 2s 4s 5s 
9m 2s 4s 5s 

<48 bytes omitted>

系统信息

Exited with return code 0
测试点 #4
Accepted
得分:100
用时:3 ms
内存:248 KiB

输入文件(4.in

10
1m1m2m3m4m5m6m2s3s4s5s6s6s6s
1m2m3m4m1s2s3s4s1p2p3p9p9p9p
2s2s3s3s4s4s5s5s6p7p8p1z1z2z
1s2s3s
<202 bytes omitted>

答案文件(4.out

3
1m 1s 2s 4s 5s 7s
2s 1m 4m 7m
5s 1m 4m 7m
4
1m 1s 4s 
4m 1s 4s
1s 1m 4m
4s 1m 4m
1
2z 2s
<218 bytes omitted>

用户输出

3
1m 1s 2s 4s 5s 7s 
2s 1m 4m 7m 
5s 1m 4m 7m 
4
1m 1s 4s 
4m 1s 4s 
1s 1m 4m 
4s 1m 4m 
1
2z 2s 5s 1z 
3
1s 2s 3s 
2s 3s 
3s 2s
<179 bytes omitted>

系统信息

Exited with return code 0
测试点 #5
Accepted
得分:100
用时:6 ms
内存:248 KiB

输入文件(5.in

10
2m2m3m3m3m3m4m6m6m7m7m7m8m8m
1s1s2s2s2s3s3s4s4s7s8s9s9s9s
1p1p2p2p2p3p4p5p7p7p8p9p9p9p
1m1m1m
<202 bytes omitted>

答案文件(5.out

2
2m 6m 7m 8m
7m 1m 2m 4m 5m
3
1s 3s
2s 1s 4s 6s 9s 
4s 3s
3
7p 1p 6p 9p
8p 1p 7p 
9p 8p

<475 bytes omitted>

用户输出

2
2m 6m 7m 8m 
7m 1m 2m 4m 5m 
3
1s 3s 
2s 1s 4s 6s 9s 
4s 3s 
3
7p 1p 6p 9p 
8p 1p 7p 
9p 8p 
6
1m 5m 
2m 4m 6m 9m 
4m 3m 5m 6m
<429 bytes omitted>

系统信息

Exited with return code 0