76pts,wa 4个点,求调orz
查看原帖
76pts,wa 4个点,求调orz
1351086
birdyan楼主2024/8/13 15:28
#include<bits/stdc++.h>
using namespace std;
int ls;
char s[10000010],a[20000010];
int h[20000010];
int mid,r;
int ans=1;
int main() {
	cin>>s;
	ls=strlen(s);
	a[0]='&';
	for(int i=1;i<=ls;i++) a[i*2-1]='#',a[i*2]=s[i-1];
	a[ls*2+1]='#',a[ls=ls*2+2]='^';
	mid=0;r=0;
	for(int i=1;i<=ls;i++) {
		if(i<r) h[i]=min(h[mid*2-i],h[mid]+mid-i);
		else h[i]=1;
		for(;a[i+h[i]]==a[i-h[i]];h[i]++) ;
		if(i+h[i]>r) r=i+h[i],mid=i;
	}
	for(int i=0;i<ls;i++) ans=max(ans,h[i]);
	cout<<ans-1<<endl;
	return 0;
}
2024/8/13 15:28
加载中...