80pts MLE on#9~#10求调
查看原帖
80pts MLE on#9~#10求调
477821
toolong114514楼主2024/1/24 09:10
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
using namespace std;
const int N=8e5+10;
struct node{
	int sum;
	int son[63];
}trie[N];
int cnt,root;
int trans[205];
char str[55];
void ins(int &pos,int num){
	if(!pos) pos=++cnt;
	int len=strlen(str);
	if(num==len-1){
		trie[pos].sum++;
		return;
	}
	ins(trie[pos].son[trans[str[num+1]]],num+1);
}
int ask(int &pos,int num){
	if(!pos) pos=++cnt;
	int len=strlen(str);
	if(num==len-1) return trie[pos].sum;
	return ask(trie[pos].son[trans[str[num+1]]],num+1);
}
int n,m,tmp;
int main(){
	//freopen("P2580_9.in","r",stdin);
	//freopen("tmp.out","w",stdout);
	ios::sync_with_stdio(false);
	for(int i='A';i<='Z';i++){
		trans[i]=++tmp;
	}
	for(int i='a';i<='z';i++){
		trans[i]=++tmp;
	}
	for(int i='0';i<='9';i++){
		trans[i]=++tmp;
	}
	cin>>n;
	while(n--){
		cin>>str;
		ins(root,-1);
	}
	cin>>m;
	while(m--){
		cin>>str;
		int t=ask(root,-1);
		if(t==1){
			cout<<"OK\n";
			ins(root,-1);
		}else if(t==0){
			cout<<"WRONG\n";
		}else{
			cout<<"REPEAT\n";
		}
	}
	return 0;
}
2024/1/24 09:10
加载中...