记录编号 |
202979 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[SYOI 2015] Asm.Def谈笑风生 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.406 s |
提交时间 |
2015-11-02 13:31:24 |
内存使用 |
0.25 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define Nil NULL
class Node
{
public:
bool exi;
Node *ch[26];
Node(void)
{
exi=false;
memset(ch,0,sizeof(ch));
}
};
void insert(Node *p,char s[])
{
for(int i=0;s[i];i++)
{
int k=s[i]-'a';
if(p->ch[k]==Nil) p->ch[k]=new Node();
p=p->ch[k];
}
p->exi=true;
}
bool query(Node *p,char s[])
{
for(int i=0;s[i];i++)
{
int k=s[i]-'a';
if(p->ch[k]==Nil) return false;
p=p->ch[k];
}
return p->exi;
}
Node *root;
bool check(char s[])
{
for(int i=0;s[i];i++)
{
if(s[i]=='*')
{
for(char c='a';c<='z';c++)
{
s[i]=c;
if(query(root,s)) return true;
}
return false;
}
}
return query(root,s);
}
void work(void)
{
root=new Node();
int m;
scanf("%d",&m);
char s[30];
for(int t=1;t<=m;t++)
{
int cmd;
scanf("%d",&cmd);
if(cmd==1)
{
scanf("%s",s);getchar();
insert(root,s);
}
else if(cmd==2)
{
scanf("%s",s);getchar();
if(check(s)) printf("YES\n");
else printf("NO\n");
}
}
}
int main(void)
{
freopen("asm_talk.in","r",stdin);
freopen("asm_talk.out","w",stdout);
work();
return 0;
}