[HDU 3068] 최 장 회 문 (manacher 알고리즘)

최 장 답문
Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27767    Accepted Submission(s): 10108
Problem Description
소문 자 영문 문자 a, b, c... y, z 로 만 구 성 된 문자열 S 를 보 여 줍 니 다. S 에서 가장 긴 답장 문자열 의 길 이 를 구 합 니 다.
답문 은 정반 독 이 모두 같은 문자열 이다. 예 를 들 어 aba, abba 등 이다.
 
Input
120 그룹 을 초과 하지 않 고 여러 그룹의 case 를 입력 하 십시오. 각 그룹 은 소문 자 영문 문자 a, b, c... y, z 로 구 성 된 문자열 S 를 입력 하 십시오.
두 그룹의 case 사 이 를 빈 줄 로 구분 합 니 다. (이 빈 줄 은 처리 할 필요 가 없습니다.)
문자열 길이 len < = 110000
 
Output
각 줄 의 정수 x 는 하나의 케이스 에 대응 하여 이 케이스 의 문자열 에 포 함 된 가장 긴 답장 길 이 를 표시 합 니 다.
 
Sample Input
 
   
aaaaabab
 

Sample Output
 
   
43
 
直接manacher()算法,模板题。

#include
#include
#include
using namespace std;
#define MAXN 1000500
char s[MAXN];
char str[MAXN];
int p[MAXN];
int l1,l2;
void init()
{
	str[0]='$';
	str[1]='#';
	for(int i=0;ii) p[i]=min(p[2*id-i],mx-i);
		else p[i]=1;
		for(;str[i+p[i]]==str[i-p[i]];p[i]++)
		{
			if(mx

>s) { l1=strlen(s); init(); manacher(); int ans=0; for(int i=0;i

좋은 웹페이지 즐겨찾기