记录编号 |
416392 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[SYOI 2015] Asm.Def谈笑风生 |
最终得分 |
100 |
用户昵称 |
~玖湫~ |
是否通过 |
通过 |
代码语言 |
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(){
;
}