玄关求条,40MLE
查看原帖
玄关求条,40MLE
1255916
Iteration72楼主2025/6/28 21:42
#include<cstring>
#include<iostream>
using namespace std;
typedef int ll;
const ll N=300000;
string str;
ll n,m,g,s[N][130];
bool lock[N],isEnd[N];
void ins(string str){
	int pre=0,now=0;
	for(;now<str.size();now++){
		int nch=str[now];
		if(!s[pre][nch]) s[pre][nch]=++g;
		pre=s[pre][nch];
	}isEnd[pre]=true;
	return;
}int qry(string str){
	int pre=0,now=0;
	for(;now<str.size();now++){
		int nch=str[now];
		if(!s[pre][nch]) return 0;
		pre=s[pre][nch];
	}if(lock[pre]==true) return 2;
	if(!isEnd[pre]) return 0;
	lock[pre]=true;
	return 1;
}int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>str,ins(str);
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>str;
		ll tmp=qry(str);
		if(tmp==0) cout<<"WRONG\n";
		if(tmp==2) cout<<"REPEAT\n";
		if(tmp==1) cout<<"OK\n";
	}return 0;
}
2025/6/28 21:42
加载中...