1 条题解

  • 0
    @ 2023-9-28 18:02:00

    手搓Tire

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e4+5;
    int tr[N*50][26];
    int idx,tag[N*50];
    inline void insert(string s){
        int u=0;
        for(auto c:s){
            if(!tr[u][c-'a']){
                tr[u][c-'a']=++idx;
            }
            u=tr[u][c-'a'];
        }
        tag[u]=1;
    }
    inline int search(string s){
        int u=0;
        for(auto c:s){
            if(!tr[u][c-'a']){
                return -1;
            }
            u=tr[u][c-'a'];
        }
        if(!tag[u]){
            return -1;
        }
        if(tag[u]==2){
            return 0;
        }
        tag[u]=2;
        return true;
    }
    int main(){
        int n,m;
        cin>>n;
        for(int i=1;i<=n;i++){
            string s;
            cin>>s;
            insert(s);
        }
        cin>>m;
        for(int i=1;i<=m;i++){
            string s;
            cin>>s;
            auto ans=search(s);
            if(ans==-1){
                puts("WRONG");
            }
            else if(ans){
                puts("OK");
            }
            else{
                puts("REPEAT");
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1528
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    9
    已通过
    5
    上传者