1 条题解

  • 0
    @ 2025-4-16 15:40:21
    #include <bits/stdc++.h>
    using namespace std;
    
    string s;
    int n, m;
    // son[i][0'a'~25'z'] 存 i 号节点的某个字母的子节点
    // tag[i] 存 i 号节点有几个单词
    // tot 存当前节点数量
    const int MAXNODE = 50 * 10000; // 长度*单词数:最坏节点个数
    int son[MAXNODE + 5][26], tag[MAXNODE + 5], tot = 1;
    
    int main()
    {
        cin >> n;
    
        for (int i = 1; i <= n; ++i)
        {
            cin >> s;
            int u = 1; // 1号节点: ''
            for (int j = 0; j < s.length(); j++)
            {
                int c = s[j] - 'a';
                if (!son[u][c])
                    son[u][c] = ++tot;
                u = son[u][c];
            }
            tag[u] = 1;
        }
        cin >> m;
        while (m--)
        {
            cin >> s;
            int u = 1;
            for (int j = 0; j < s.length(); ++j)
            {
                int c = s[j] - 'a';
                u = son[u][c];
                if (!u)
                    break;
            }
            if (tag[u] == 1)
            {
                tag[u] = 2;
                cout << "OK\n";
            }
            else if (tag[u] == 2)
                cout << "REPEAT\n";
            else
                cout << "WRONG\n";
        }
    
        return 0;
    }
    
    

    信息

    ID
    4210
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    6
    已通过
    4
    上传者