所以这题数据格式到底是啥样的,gets答案本机和OJ上不一样,cin就行
查看原帖
所以这题数据格式到底是啥样的,gets答案本机和OJ上不一样,cin就行
89644
Harry_hcx楼主2021/7/14 20:38

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的读入机制到底是啥样吗?

2021/7/14 20:38
加载中...