关于Compile Error
  • 板块学术版
  • 楼主OIforJoy
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/6/15 10:13
  • 上次更新2023/11/7 00:36:57
查看原帖
关于Compile Error
63964
OIforJoy楼主2020/6/15 10:13

为什么这个代码交到题目里和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;
}
2020/6/15 10:13
加载中...