关于这道题一些诡异的问题
查看原帖
关于这道题一些诡异的问题
243070
nkxjlym楼主2020/6/27 11:34

这道题我在本机上用文件输入输出与标准答案完全一样,可第二个点总是说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;
}
2020/6/27 11:34
加载中...