Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

manacher----CSPorz

Posted by csporz at 2017-12-09 09:35:01
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define maxn 2100000
using namespace std;
	char s[maxn]; int n,maxright,pos,rl[maxn];
	int ans; int st=0;
int main(){
	while(cin>>s){
		int ans=0; pos=0; maxright=0; memset(rl,0,sizeof(rl));
		if(s[0]=='E'&&s[1]=='N'&&s[2]=='D')return 0; st++;
		n=strlen(s);
		for(int i=n*2;i>=0;i--){
			if(i%2)s[i]=s[(i-1)/2];
			else s[i]='#';
		}	
		n*=2;
		for(int i=0;i<=n;i++){
			if(i<maxright)rl[i]=min(rl[2*pos-i],maxright-i);
			else rl[i]=1;
			while(i-rl[i]>=0&&i+rl[i]<=n&&s[i+rl[i]]==s[i-rl[i]])rl[i]++;
			if(i+rl[i]-1>maxright){
				maxright=i+rl[i]-1;
				pos=i;
			}
			ans=max(ans,rl[i]);
		}
		printf("Case %d: %d\n",st,ans-1);
	}
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator