求助
  • 板块学术版
  • 楼主hwc2011
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/12 12:05
  • 上次更新2024/8/12 13:56:01
查看原帖
求助
1313003
hwc2011楼主2024/8/12 12:05

P1723

#include<bits/stdc++.h>
using namespace std;
const int N=5e6+6;
char c[N<<1],s[N];
int n,r,mid,siz,len[N<<1],ans;
void init(){
	siz=ans=0;
//	r=mid=0;
	c[siz++]='{';
	int si=strlen(s+1);
	for(int i=1;i<=si;i++){
		c[siz++]=',';
		c[siz++]=s[i];
	} 
	c[siz++]=',';
	c[siz]='}';
}
int work(){
	for(int i=1;i<=siz;i++){
		if(i<r) len[i]=min(r-i,len[mid*2-i]);
		while(c[i-len[i]]==c[i+len[i]]){
			len[i]++;
		}
		if(i+len[i]>r){
			r=i+len[i];
			mid=i;
		}
		ans=max(ans,len[i]);
	}
	return ans-1;
}
int main(){
	scanf("%d",&n);
	while(n--){
		scanf("%s",s+1);
		init();
		printf("%lld\n",work());
	}
}

注释那行加了50WA,不加70TLE

2024/8/12 12:05
加载中...