88分
#include<bits/stdc++.h>
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
int ch[1000005][27],n,m,t,nxt[1000005],end[1000005],tot=1,num;
bool visit[1000005];
char moshi[10000007];
char a[100005][104];
char ans[100005];
int stak[100005];
void insert(char *a){
int len=strlen(a+1),p=1;
for (int i=1;i<=len;i++){
int c=a[i]-'0';
if (!ch[p][c]) ch[p][c]=++tot;
p=ch[p][c];
}
end[p]=1;
}
void pre(){
memset(nxt,0,sizeof(nxt));
queue<int>q;
q.push(1);
for (int i=0;i<26;i++)
ch[0][i]=1;
while(!q.empty()){
int u=q.front();
for (int i=0;i<26;i++){
if (!ch[u][i]) ch[u][i]=ch[nxt[u]][i];
else{
q.push(ch[u][i]);
nxt[ch[u][i]]=ch[nxt[u]][i];
end[u]|=end[nxt[u]];
}
}
q.pop();
}
}
void search(int u){
visit[u]=true;
for (int i=0;i<2;i++){
if (visit[ch[u][i]]){
puts("TAK");
exit(0);
}
else if (!end[ch[u][i]]) search(ch[u][i]);
}
visit[u]=false;
}
int main(){
memset(ch,0,sizeof(ch));
memset(end,0,sizeof(end));
memset(nxt,0,sizeof(nxt));
tot=1;
cin>>n;getchar();
for (int i=1;i<=n;i++){
gets(a[i]+1);
insert(a[i]);
}
pre();
search(0);
puts("NIE");
return 0;
}
100
#include<bits/stdc++.h>
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
int ch[1000005][27],n,m,t,nxt[1000005],end[1000005],tot=1,num;
bool visit[1000005];
char moshi[10000007];
char a[100005][104];
char ans[100005];
int stak[100005];
void insert(char *a){
int len=strlen(a+1),p=1;
for (int i=1;i<=len;i++){
int c=a[i]-'0';
if (!ch[p][c]) ch[p][c]=++tot;
p=ch[p][c];
}
end[p]=1;
}
void pre(){
memset(nxt,0,sizeof(nxt));
queue<int>q;
q.push(1);
for (int i=0;i<26;i++)
ch[0][i]=1;
while(!q.empty()){
int u=q.front();
for (int i=0;i<26;i++){
if (!ch[u][i]) ch[u][i]=ch[nxt[u]][i];
else{
q.push(ch[u][i]);
nxt[ch[u][i]]=ch[nxt[u]][i];
end[u]|=end[nxt[u]];
}
}
q.pop();
}
}
void search(int u){
visit[u]=true;
for (int i=0;i<2;i++){
if (visit[ch[u][i]]){
puts("TAK");
exit(0);
}
else if (!end[ch[u][i]]) search(ch[u][i]);
}
visit[u]=false;
}
int main(){
memset(ch,0,sizeof(ch));
memset(end,0,sizeof(end));
memset(nxt,0,sizeof(nxt));
tot=1;
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i]+1;
insert(a[i]);
}
pre();
search(0);
puts("NIE");
return 0;
}
有大佬告诉告诉gets的读入机制到底是啥样吗?