编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#66940 #1324. [L2-3]一步之遥 Accepted 100 19 ms 328 K C++ 11 (NOI) / 2.3 K wty 2022-03-26 20:19:55
显示原始代码
#include <bits/stdc++.h>
#define db double
#define ll long long
#define int ll
#define vi vector<int>
#define vii vector<vi>
#define pii pair<int, int>
#define vp vector<pii>
#define vip vector<vp>
#define mkp make_pair
#define pb push_back
#define Case(x) cout << "Case #" << x << ": "
using namespace std;
const int INF = 0x3f3f3f3f;
const int P = 998244353;
vi card, cnt;
map<string, int> hsh;
bool dfs(int p = 0, int tot = 0) {
    if (tot == 12)
        return 1;
    while (cnt[p] == 0 && p < 38) p++;
    if (p + 2 < 30 && cnt[p] && cnt[p + 1] && cnt[p + 2]) {
        for (int j = 0; j < 3; j++) cnt[p + j]--;
        if (dfs(p, tot + 3))
            return 1;
        for (int j = 0; j < 3; j++) cnt[p + j]++;
    }
    if (cnt[p] >= 3) {
        cnt[p] -= 3;
        if (dfs(p, tot + 3))
            return 1;
        cnt[p] += 3;
    }
    return 0;
}
bool chk(vi &a) {
    sort(a.begin(), a.end());
    vi b = a;
    for (int i = 0; i < 13; i++) {
        if (b[i] == b[i + 1]) {
            b.erase(b.erase(b.begin() + i));
            cnt = vi(38);
            for (int j : b) cnt[j]++;
            if (dfs())
                return 1;
            b = a;
            i++;
        }
    }
    return 0;
}
void findcard(vi &win, vi &c) {
    // for (auto i : c) cout << i << ' ';
    // cout << '\n';
    vi d = c;
    for (int i : card) {
        d.pb(i);
        if (chk(d))
            win.pb(i);
        d = c;
    }
}
string word[4] = { "m", "s", "p", "z" };
string bck(int x) { return to_string(x % 10) + word[x / 10]; }
signed main() {
#ifdef _DEBUG
    // freopen("1.in", "r", stdin);
    // FILE *file = freopen("out", "w", stdout);
#endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    for (int i = 0; i < 4; i++) {
        for (int j = 1; j < 10; j++) {
            if (i < 3 || j < 8) {
                card.pb(i * 10 + j);
                hsh[to_string(j) + word[i]] = i * 10 + j;
            }
        }
    }
    int T;
    cin >> T;
    while (T--) {
        string s;
        cin >> s;
        vi a;
        for (int i = 0; i < 28; i += 2) a.pb(hsh[s.substr(i, 2)]);
        sort(a.begin(), a.end());
        if (chk(a)) {
            cout << "Tsumo!" << '\n';
            continue;
        }
        vii win(14);
        vi c = a;
        int ans = 0;
        for (int i = 0; i < 14; i++) {
            if (i > 0 && a[i] == a[i - 1])
                continue;
            c.erase(c.begin() + i);
            findcard(win[i], c);
            if (!win[i].empty())
                ans++;
            c = a;
        }
        cout << ans << '\n';
        for (int i = 0; i < 14; i++) {
            if (!win[i].empty()) {
                cout << bck(a[i]) << ' ';
                for (auto j : win[i]) cout << bck(j) << ' ';
                cout << '\n';
            }
        }
    }
    return 0;
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:3 ms
内存:328 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
用时:4 ms
内存:276 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
用时:3 ms
内存:248 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
用时:4 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
用时:5 ms
内存:272 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