求助!
查看原帖
求助!
498102
lefy楼主2021/12/7 20:40
#include<bits/stdc++.h>
using namespace std;
char a[100010],n;
int nxt[100010];
int cnt[100010];
int ans[100010];
void Nxt(){
	for(int i=2,now=0;i<=n;i++){
		while(now&&a[i]!=a[now+1])now=nxt[now];
		if(a[i]==a[now+1])now++;
		nxt[i]=now;
	}
}

int main(){
	cin>>a+1;
	n=strlen(a+1);
	Nxt();
	for(int i=n;i>=1;i--){
		cnt[i]++;
		cnt[nxt[i]]+=cnt[i];
	}
	int cnt1=0;
	for(int i=nxt[n];i;i=nxt[i]){
		ans[++cnt1]=i;
	}
	printf("%d\n",cnt1+1);
	sort(ans+1,ans+1+cnt1);
	for(int i=1;i<=cnt1;i++){
		printf("%d %d\n",ans[i],cnt[ans[i]]);
	}
	printf("%d %d",n,cnt[n]);
	return 0;
}

为什么第八个点会cnt1为0?感觉nxt没有问题啊

2021/12/7 20:40
加载中...