比赛 |
“Asm.Def战记之太平洋”杯 |
评测结果 |
AAWWWWWAWW |
题目名称 |
Asm.Def谈笑风生 |
最终得分 |
30 |
用户昵称 |
devil |
运行时间 |
0.420 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2015-11-02 10:40:05 |
显示代码纯文本
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <stack>
#include <vector>
#include <map>
#include <queue>
#include <ctime>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int uint;
const int inf=1061109567;
const int maxn=100010;
const int maxm=27;
const int mod=1000000007;
const double pi=3.14;
struct node
{
node *next[maxm];
int flag;
};
node *root;
node *newnode()
{
node *tmp=new node;
for(int i=0;i<maxm;i++) tmp->next[i]=NULL;
return tmp;
}
void build(char *str)
{
int len=strlen(str);
node *p=root;
int alp;
for(int i=0;i<len;i++)
{
alp=str[i]-'a';
if(p->next[alp]==NULL)
p->next[alp]=newnode();
p=p->next[alp];
}
p->flag=1;
}
bool found(char *str)
{
int len=strlen(str);
node *p=root;
int alp;
for(int i=0;i<len;i++)
{
if(str[i]=='*')
{
for(int k=0;k<26;k++)
{
if(p->next[k]==NULL) continue;
p=p->next[k];int j;
for(j=i+1;j<len;j++)
{
alp=str[j]-'a';
if(p->next[alp]==NULL) break;
p=p->next[alp];
}
if(j==len&&p->flag==1) return true;
}
return false;
}
alp=str[i]-'a';
if(p->next[alp]==NULL) return false;
p=p->next[alp];
}
if(p->flag==1) return true;
return false;
}
int main()
{
freopen("asm_talk.in","r",stdin);
freopen("asm_talk.out","w",stdout);
//clock_t st=clock();
int m,kase;scanf("%d",&m);
char s[maxm];root=newnode();
memset(s,0,sizeof(s));
while(m--)
{
scanf("%d %s\n",&kase,s);
if(kase==1)
{
build(s);
memset(s,0,sizeof(s));
}
else
{
if(found(s)) printf("YES\n");
else printf("NO\n");
}
}
//clock_t ed=clock();
//printf("\nTime used : %.5lf Ms\n",double(ed-st)/CLOCKS_PER_SEC);
return 0;
}