记录编号 153730 评测结果 AAAAAAAAAA
题目名称 [HNOI 2004] L语言 最终得分 100
用户昵称 Gravatarnew ioer 是否通过 通过
代码语言 C++ 运行时间 0.369 s
提交时间 2015-03-18 21:33:31 内存使用 19.86 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct trie{
	bool p;
	trie *c[26];
	trie(){
		p=0;
		for(int i=0;i<26;i++) c[i]=NULL;
	}
};
int n,m,tv,len,ans,f[1100000];
char buf[1100000],ch[15000000],*ptr=ch;
void in(int &x){
	x=0;
	while(*ptr<48) ptr++;
	while(*ptr>47) x=x*10+*ptr++-48;
}
void readln(char *c){
	len=0;
	while(*ptr<60) ptr++;
	while(*ptr>60) c[len++]=*ptr++;
}
void ins(int i,trie *&o){
	if(o==NULL) o=new trie;
	if(i+1==len) {o->p=1;return;}
	ins(i+1,o->c[buf[i+1]-'a']);
} 
void ask(int i,trie *o){
	if(o==NULL||i==len) return;
	if(o->p) f[i]=tv;
	ask(i+1,o->c[buf[i+1]-'a']);
}
int main(){
	freopen("language.in","r",stdin);
	freopen("language.out","w",stdout);
	fread(ch,1,15000000,stdin);
	in(n),in(m);
	trie *root=new trie;
	for(int i=1;i<=n;i++) readln(buf),ins(0,root->c[buf[0]-'a']);
	for(tv=1;tv<=m;tv++){
		ans=-1,readln(buf),ask(0,root->c[buf[0]-'a']);
		for(int i=0;i<len;i++){
			if(f[i]!=tv) continue;
			ans=i,ask(i+1,root->c[buf[i+1]-'a']);
		}
		if(ans!=-1) printf("%d\n",ans+1);
		else printf("0\n");
	}
}