为什么这个代码交到题目里和luogu在线IDE里都发生了CE,而本地却没有?
评测记录: https://www.luogu.com.cn/record/34410472
https://www.luogu.com.cn/record/34410422
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<vector>
using namespace std;
int n,cnt=1;
string s;
struct node
{
char c='@';//'@'->root
int ch[26]={0},fail=1,num=0,f=0;
bool vis=0;
}t[1000010];
int alloc()
{
cnt++;
return cnt;
}
vector<int> dep[1000010];
void insert()
{
int x=1;
for(int i=0;i<s.size();i++)
{
if(t[x].ch[s[i]-'a']==0)
{
int newnode=alloc();
t[x].ch[s[i]-'a']=newnode;
t[newnode].f=x;
t[newnode].c=s[i];
dep[i].push_back(newnode);
}
x=t[x].ch[s[i]-'a'];
}
t[x].num++;
}
void build()
{
for(int i=0;i<dep[0].size();i++)t[dep[0][i]].fail=1;
for(int i=1;i<1000010;i++)
{
for(int j=0;j<dep[i].size();j++)
{
int x=t[t[dep[i][j]].f].fail;
while(1)
{
if(x==1)
{
t[dep[i][j]].fail=1;
break;
}
if(t[x].ch[t[dep[i][j]].c-'a'])
{
t[dep[i][j]].fail=t[x].ch[t[dep[i][j]].c-'a'];
break;
}
x=t[x].fail;
}
}
}
}
int ans=0;
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
insert();
}
build();
cin>>s;
int st=1;
for(int i=0;i<s.size();i++)
{
bool FAIL=0;
while(t[st].ch[s[i]-'a']==0)
{
if(st==1)
{
FAIL=1;
break;
}
st=t[st].fail;
break;
}
if(FAIL)continue;
st=t[st].ch[s[i]-'a'];
if(!t[st].vis)
{
ans+=t[st].num;
t[st].vis=1;
}
}
cout<<ans;
return 0;
}