結果

問題 No.3323 岩井星式ジャンケン
コンテスト
ユーザー iastm
提出日時 2025-11-01 16:04:56
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,877 bytes
コンパイル時間 1,327 ms
コンパイル使用メモリ 90,712 KB
実行使用メモリ 17,968 KB
最終ジャッジ日時 2025-11-01 16:05:20
合計ジャッジ時間 2,622 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20 WA * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <array>

using node = std::array<int, 26>;

int main() {
    int N, M;
    std::cin >> N >> M;
    std::vector<node> trie(1);
    while (N--) {
        std::string S;
        std::cin >> S;
        int curr = 0;
        for (char c : S) {
            if (trie[curr][c - 'A'] == 0) {
                trie[curr][c - 'A'] = trie.size();
                trie.emplace_back();
            }
            curr = trie[curr][c - 'A'];
        }
    }

    int curr = 0;
    std::string result;
    while (M--) {
        if (curr == -1) {
            result.push_back('G');
            continue;
        }
        if (trie[curr]['G' - 'A'] && trie[curr]['C' - 'A'] && trie[curr]['P' - 'A']) {
            std::cout << -1 << std::endl;
            return 0;
        }
        if (trie[curr]['G' - 'A'] && !trie[curr]['C' - 'A'] && !trie[curr]['P' - 'A']) {
            result.push_back('P');
            curr = -1;
            continue;
        }
        if (!trie[curr]['G' - 'A'] && trie[curr]['C' - 'A'] && !trie[curr]['P' - 'A']) {
            result.push_back('G');
            curr = -1;
            continue;
        }
        if (!trie[curr]['G' - 'A'] && !trie[curr]['C' - 'A'] && trie[curr]['P' - 'A']) {
            result.push_back('C');
            curr = -1;
            continue;
        }
        if (trie[curr]['G' - 'A'] && trie[curr]['C' - 'A']) {
            result.push_back('G');
            curr = trie[curr]['G' - 'A'];
            continue;
        }
        if (trie[curr]['G' - 'A'] && trie[curr]['P' - 'A']) {
            result.push_back('P');
            curr = trie[curr]['P' - 'A'];
            continue;
        }
        if (trie[curr]['P' - 'A'] && trie[curr]['C' - 'A']) {
            result.push_back('C');
            curr = trie[curr]['C' - 'A'];
        }
    }
    std::cout << result << std::endl;
}
0