这道题我在本机上用文件输入输出与标准答案完全一样,可第二个点总是说On line 1 column 1, read 3, expected 1.
向大佬求助!
附上代码
#include<bits/stdc++.h>
#define R register int
#define I inline
using namespace std;
const int maxm=1e6+5;
struct node{int fail,next[26],flag;}trie[maxm];
int tt=1;
queue<int>q;
I void insert()
{
char c;
int p=1;
while(c=getchar(),c!='\n')
{
int t=c-'a';
if(!trie[p].next[t])trie[p].next[t]=++tt;
p=trie[p].next[t];
}
++trie[p].flag;
}
I void ac()
{
q.push(1);
while(q.size())
{
int t=q.front();
q.pop();
for(R i=0;i<26;i++)
{
int son=trie[t].next[i];
if(son)
{
int p=trie[t].fail;
while(p&&!trie[p].next[i])
p=trie[p].fail;
if(p)trie[son].fail=trie[p].next[i];
else trie[son].fail=1;
q.push(son);
}
}
}
}
I int query()
{
char c;
int p=1,cnt=0;
while(c=getchar(),c!=EOF)
{
int t=c-'a',tmp;
while(p&&!trie[p].next[t])p=trie[p].fail;
if(p)p=trie[p].next[t];
else p=1;
tmp=p;
while(tmp&&trie[tmp].flag!=-1)
{
cnt+=trie[tmp].flag;
trie[tmp].flag=-1;
tmp=trie[tmp].fail;
}
}
return cnt;
}
int main()
{
int n;
//freopen("3.in","r",stdin);
scanf("%d\n",&n);
for(R i=1;i<=n;i++)
insert();
ac();
printf("%d",query());
return 0;
}