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