字典树做法,6到11测试点RE,求教
查看原帖
字典树做法,6到11测试点RE,求教
905957
Serend1pity楼主2024/3/4 09:56
#include<iostream>
#include<cstring>

using namespace std;

struct trie{
	int nex[100003][26];
	int cnt;
	bool exist[100003];
	bool vis[100003];
	
	void insert(char *s,int l){
		int p=0;
		for(int i=0;i<l;i++){
			if(!nex[p][s[i]-'a']) nex[p][s[i]-'a']=++cnt;
			p=nex[p][s[i]-'a'];
		}
		exist[p]+=1;
	}
	void find(char*s,int l){
		int p=0;
		for(int i=0;i<l;i++){
			if(!nex[p][s[i]-'a']) {
				cout<<"WRONG"<<endl;return ;
			}
			p=nex[p][s[i]-'a'];
		}
		if(exist[p]){
			if(vis[p]) {cout<<"REPEAT"<<endl;return ;}
			else{
			cout<<"OK"<<endl;vis[p]=true;
			}
		}
		else{cout<<"WRONG"<<endl;return ;
		} 
	}	
}trie1;

int n,m;

int main(){
	cin>>n;
	
	for(int i=0;i<n;i++){
		char s[53];
		cin>>s;
		trie1.insert(s,strlen(s));
	}
	cin>>m;
	for(int i=0;i<m;i++){
		char s[53];
		cin>>s;
		trie1.find(s,strlen(s));
	}
	return 0;
}
2024/3/4 09:56
加载中...