直接上代码:
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; typedef unsigned long long ull; #define pf printf #define mem(a,b) memset(a,b,sizeof(a)) #define prime1 1e9+7 #define prime2 1e9+9 #define pi 3.14159265 #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #define scand(x) scanf("%llf",&x) #define f(i,a,b) for(int i=a;i<=b;i++) #define scan(a) scanf("%d",&a) #define dbg(args) cout<<#args<<":"<<args<<endl; #define inf 0x3f3f3f3f const int maxn=1e6+10; int n,m,t; int l=0; char s[maxn]; int trie[maxn][26],cnt[maxn]; void insert(char* s) { int len=strlen(s); int now=0; f(i,0,len-1) { char c=s[i]-'a'; if(!trie[now][c])trie[now][c]=++l; now=trie[now][c]; } cnt[now]=1; } int query(char* s) { int len=strlen(s); int now=0; f(i,0,len-1) { char c=s[i]-'a'; if(!trie[now][c])return 1;//匹配失败 now=trie[now][c]; } if(cnt[now]==0)return 1;//没有单词 if(cnt[now]==1) { cnt[now]=2; return 2; } if(cnt[now]==2)return 3; } void debug() { f(i,0,l) { pf("%d : %d next[",i,cnt[i]); f(j,0,26) { pf("%d ",trie[i][j]); } pf("] "); } } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); std::ios::sync_with_stdio(false); scan(n); mem(trie,0); f(i,1,n) { scanf("%s",s); insert(s); // debug(); } scan(m); int ans=0; while(m--) { scanf("%s",s); ans=query(s); if(ans==1)pf("WRONG "); else if(ans==3)pf("REPEAT "); else pf("OK "); } }