82分求助……
查看原帖
82分求助……
85682
绝顶我为峰kkksd06楼主2020/1/13 18:53

#6 #9 WA QAQ

谁来救救我QAQ

#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;
struct trie
{
	bool end;
	int son[2],fail;
}t[500001];
int n,cnt;
bool vis[500001],f[500001];
inline void build(string s)
{
	int len=s.length(),k=0;
	for(register int i=0;i<len;++i)
	{
		if(!t[k].son[s[i]-'0'])
			t[k].son[s[i]-'0']=++cnt;
		k=t[k].son[s[i]-'0'];
	}
	t[k].end=1;
}
inline void getfail()
{
	queue<int> q;
	for(register int i=0;i<2;++i)
		if(t[0].son[i])
			q.push(t[0].son[i]);
	while(!q.empty())
	{
		int k=q.front();
		q.pop();
		for(register int i=0;i<2;++i)
			if(t[k].son[i])
			{
				t[t[k].son[i]].fail=t[t[k].fail].son[i];
				q.push(t[k].son[i]);
			}
			else
				t[k].son[i]=t[t[k].fail].son[i];
	}
}
void dfs(int k)
{
	vis[k]=1;
	for(register int i=0;i<2;++i)
	{
		if(vis[t[k].son[i]])
		{
			puts("TAK");
			exit(0);
		}
		if(t[k].son[i]&&!t[t[k].son[i]].end&&!t[t[t[k].son[i]].fail].end&&!f[t[k].son[i]])
		{
			f[t[k].son[i]]=1;
			dfs(t[k].son[i]);
		}
	}
	vis[k]=0;
}
int main()
{
	scanf("%d",&n);
	for(register int i=1;i<=n;++i)
	{
		string s;
		cin>>s;
		build(s);
	}
	getfail();
	dfs(0);
	puts("NIE");
	return 0;
}
2020/1/13 18:53
加载中...