记录编号 416392 评测结果 AAAAAAAAAA
题目名称 [SYOI 2015] Asm.Def谈笑风生 最终得分 100
用户昵称 Gravatar~玖湫~ 是否通过 通过
代码语言 C++ 运行时间 0.102 s
提交时间 2017-06-21 14:48:38 内存使用 17.83 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int M=500010;
int sz,m;
int ch[M][30],val[M];
char s[30];
inline int getnum(char w){
       //if(w=='*') return 26;
       return w-'a';
}
inline void insert(){
	int u=0,len=strlen(s);
	for(int i=0;i<len;i++){
		int c=getnum(s[i]);
		if(!ch[u][c]) ch[u][c]=++sz;
		u=ch[u][c];
	}
	val[u]=1;
}
inline void query(){
	int u=0,len=strlen(s);
	/*if(s[0]=='*'&&len==1) 
	  for(int i=0;i<=25;i++)
	     cout<<ch[0][i]<<" "<<val[ch[0][i]]<<endl;*/
	bool pd=0;
	for(int i=0;i<len;i++){
		if(s[i]=='*'){
			pd=1;
			int pp=u;
			for(int j=0;j<=25;j++){
                if(i==len-1&&val[ch[pp][j]]){printf("YES\n");return;}
				if(ch[pp][j]){
                    u=ch[pp][j];
					for(int k=i+1;k<len;k++){
						int z=getnum(s[k]);
						//if(j==5)
						  //cout<<ch[u][22]<<"  "<<u<<"  dfgsdf   "<<z<<endl;
						if(!ch[u][z]) {/*cout<<j<<endl;*/break;}
						u=ch[u][z];
						if(k==len-1&&val[u]){printf("YES\n");return;}
					}
				}
			}
		}
		else{
			int c=getnum(s[i]);
			if(!ch[u][c]){printf("NO\n");return ;}
			u=ch[u][c];
		}
	}
	if(pd) {printf("NO\n");return;}
	if(val[u]){printf("YES\n");return ;}
	printf("NO\n");return;
}
int hh(){
    freopen("asm_talk.in","r",stdin);
    freopen("asm_talk.out","w",stdout);
	scanf("%d",&m);
	int pp;
	for(int i=1;i<=m;i++){
		scanf("%d",&pp);
		scanf("%s",s);
		if(pp==1) insert();
		else query();
	}
	//while(1);
	return 0;
}
int sb=hh();
int main(){
    ;
}