比赛 |
“Asm.Def战记之太平洋”杯 |
评测结果 |
AAWWWWWAWW |
题目名称 |
Asm.Def谈笑风生 |
最终得分 |
30 |
用户昵称 |
高哥 |
运行时间 |
0.374 s |
代码语言 |
C++ |
内存使用 |
20.47 MiB |
提交时间 |
2015-11-02 09:56:41 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 210000
using namespace std;
int m;
//struct Tire{
int ch[N][27];
int val[N];
int sz;
//Tire(){sz=1;memset(ch[0],0,sizeof(ch[0]));}
void init()
{
sz=1;memset(ch[0],0,sizeof(ch[0]));
}
int idx(char c) {return c=='*'? 26 : c-'a';}
void insert(char *s,int v)
{
int u=0,n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c]){
memset(ch[sz],0,sizeof(sz));
val[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=v;
}
bool query(char *s)
{
int u=0,n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(ch[u][c])
u=ch[u][c];
else
return false;
}
if(val[u]) return true;
else return false;
}
//};
int main()
{
freopen("asm_talk.in","r",stdin);
freopen("asm_talk.out","w",stdout);
init();
scanf("%d",&m);
int op;
//Tire tire=Tire();
char s[30];
for(int i=1;i<=m;i++)
{
scanf("%d %s",&op,s);
if(op==1)
insert(s,1);
else
{
int len=strlen(s);
bool c=false;
for(int i=0;i<len;i++)
{
if(s[i]=='*')
for(int j='a';j<='z';j++)
{
s[i]=j;
if(query(s))
{
printf("YES\n");
{
c=true;
continue;
}
}
}
}
if(query(s))
{
printf("YES\n");
continue;
}
if(!c)
printf("NO\n");
}
}
return 0;
}
/*
6
1 ab
2 ab*
1 abc
1 adc
2 *d
2 abc
7
1 ababa
1 dilge
1 koijj
2 dil*e
2 ko*
2 *baba
2 koij*
*/