30分,求救
查看原帖
30分,求救
485985
jkloveg楼主2021/10/16 13:51
#include<iostream>
#include<cstdio>

using namespace std;

const int N = 500010;

int n,m;
int son[N][26], idx, cnt1[N],cnt2[N];

void insert_trie(char* s)
{
    int p = 0;
    for(int i = 0; s[i]; i++)
    {
        int u = s[i] - 'a';
        if(!son[p][u]) son[p][u] = ++ idx;
        p = idx;
    }
    cnt1[p] = 1;
}

void search_trie(char* s)
{
    int p = 0;
    for(int i = 0; s[i]; i++)
    {
        int u = s[i] - 'a';
        if(!son[p][u])
        {
            printf("WRONG\n");
            return ;
        }
        p = son[p][u];
    }

    if(cnt1[p])
    {
        cnt2[p]++;
    }

    if(cnt2[p] == 1)
    {
        printf("OK\n");
        return ;
    }

    else if(cnt2[p] > 1)
    {
        printf("REPEAT\n");
        return ;
    }
    printf("WRONG\n");
}

int main()
{
    char s[55];

    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> s;
        insert_trie(s);
    }

    cin >> m;
    for(int i = 1; i <= m; i++)
    {
        cin >> s;
        search_trie(s);
    }

    return 0;
}

2021/10/16 13:51
加载中...