比赛 |
“Asm.Def战记之太平洋”杯 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Asm.Def谈笑风生 |
最终得分 |
100 |
用户昵称 |
Regnig Etalsnart |
运行时间 |
0.623 s |
代码语言 |
C++ |
内存使用 |
238.73 MiB |
提交时间 |
2018-11-07 14:09:17 |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int m,cmd,t[2000000][30],dep[2000000],cnt;
bool flag[2000000];
void in(string s)
{
int now=0,len=s.length();
for(int i=0;i<len;i++)
{
int ch=s[i]-'a';
if(!t[now][ch])
t[now][ch]=++cnt;
now=t[now][ch];
}
flag[now]=1;
return;
}
bool find(string s)
{
int len=s.length();
queue<int>Q;
Q.push(0);
while(!Q.empty())
{
int now=Q.front();Q.pop();
if(s[dep[now]]=='*')
{
for(int i=0;i<26;i++)
{
if(t[now][i])
{
dep[t[now][i]]=dep[now]+1;
Q.push(t[now][i]);
if(dep[now]==len-1&&flag[t[now][i]])return 1;
}
}
}
else
{
int ch=s[dep[now]]-'a';
if(t[now][ch])
{
dep[t[now][ch]]=dep[now]+1;
Q.push(t[now][ch]);
}
if(dep[now]==len-1&&flag[t[now][ch]])return 1;
}
}
return 0;
}
int main()
{
freopen("asm_talk.in","r",stdin);
freopen("asm_talk.out","w",stdout);
scanf("%d",&m);
while(m--)
{
string s="";
scanf("%d",&cmd);
cin>>s;
if(cmd==1)in(s);
else if(find(s))printf("YES\n");
else printf("NO\n");
}
return 0;
}