HDU 3068 최 장 회 문 (Manacher 템 플 릿 문제)

제목:
          중국어.
생각:
          Manacher 템 플 릿 문제
          따로 답문 자동 해법 이 있다.
코드:
#include 
using namespace std;
const int MAXN=210000;
struct Manacher{
    char Ma[MAXN*2];
    int Mp[MAXN*2];
    int Mx[MAXN*2];
    int len;
    double ave;
    int l;
    int ans;
    void manachar(char s[]){
        l=0;ans=0;
        len=strlen(s);
        Ma[l++]='$';
        Ma[l++]='#';
        for(int i=0; ii?min(Mp[2*id-i],mx-i):1;
            while(Ma[i+Mp[i]]==Ma[i-Mp[i]]){
                Mp[i]++;
                ave++;
            }
            if(i+Mp[i]>mx)
            {
                mx=i+Mp[i];
                id=i;
            }
            Mx[i]=mx;
            ans=max(ans,Mp[i]-1);
        }
        ave/=len;
    }
    void debug(){
        printf("id:     ");
        for(int i=0;i

소문 자 영문 문자 a, b, c... y, z 로 만 구 성 된 문자열 S 를 보 여 줍 니 다. S 에서 가장 긴 답장 문자열 의 길 이 를 구 합 니 다. 
답문 은 정반 독 이 모두 같은 문자열 이다. 예 를 들 어 aba, abba 등 이다.
Input 입력 은 120 그룹 을 넘 지 않 고 여러 그룹의 case 를 입력 합 니 다. 각 그룹 은 소문 자 영문 문자 a, b, c... y, z 로 구 성 된 문자열 S 를 입력 합 니 다. 
두 그룹의 case 사 이 를 빈 줄 로 구분 합 니 다. (이 빈 줄 은 처리 할 필요 가 없습니다.) 
문자열 길이 len < = 110000 Output 각 줄 의 정수 x 는 하나의 case 에 대응 하여 이 그룹의 case 문자열 에 포 함 된 가장 긴 답장 길 이 를 표시 합 니 다. 
Sample Input
aaaa

abab
Sample Output
4
3

좋은 웹페이지 즐겨찾기