记录编号 |
412917 |
评测结果 |
AAAAAAAAAA |
题目名称 |
情书 |
最终得分 |
100 |
用户昵称 |
LadyLex |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.487 s |
提交时间 |
2017-06-10 12:05:30 |
内存使用 |
1.64 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
using namespace std;
int n;
struct node
{
node *ch[26],*f;
vector<int>id;
node()
{
f=NULL;id.clear();
memset(ch,0,sizeof(ch));
}
}*root=new node();
char text[1350100];int head;
inline void insert(int id,char*t)
{
node* rt=root;int len=strlen(t);
for(int i=0;i<len;i++)
{
//printf("%d ",t[i]-'a');
if(rt->ch[t[i]-'a']==NULL)
rt->ch[t[i]-'a']=new node();
rt=rt->ch[t[i]-'a'];
}
//printf("\n");
rt->id.push_back(id);
}
node* q[10010];int hd=1,tl;
inline void bfs()
{
root->f=NULL;
q[++tl]=root;
while(hd<=tl)
{
node* rt=q[hd++];
for(int i=0;i<26;i++)
if(rt->ch[i]!=NULL)
{
q[++tl]=rt->ch[i];
node* u=rt->f;
while(u&&!u->ch[i])u=u->f;
if(u==NULL)rt->ch[i]->f=root;
else rt->ch[i]->f=u->ch[i];
}
}
}
inline bool read()
{
head=0;
char c;
if(cin>>c)
{
while(c!='$')
{
if(c=='\n'||c==' '){c=getchar();continue;}
text[head++]=c;c=getchar();
}
return 1;
}
return 0;
}
bool vis[110];
inline void cnt(node *rt)
{
if(rt==NULL)return;
if(!rt->id.empty())
for(int i=0;i<rt->id.size();i++)
vis[rt->id[i]]=1;
cnt(rt->f);
}
inline bool deal(char*t)
{
int len=strlen(t);
node* rt=root;int ans=0;
for(int i=0;i<len;i++)
{
int d=t[i]-'a';
while(rt&&!rt->ch[d])rt=rt->f;
rt=rt?rt->ch[d]:root;
cnt(rt);
}
for(int i=1;i<=n;i++)if(vis[i])ans++;
return ans==n;
}
int main()
{
//freopen("Lex.txt","r",stdin);
freopen("lettera.in","r",stdin);
freopen("lettera.out","w",stdout);
scanf("%d",&n);char s[110];
for(int i=1;i<=n;i++)
scanf("%s",s),insert(i,s);
bfs();
while(read())
{
memset(vis,0,sizeof(vis));
if(deal(text))printf("Yes\n");
else printf("No\n");
}
}