zoukankan      html  css  js  c++  java
  • 【无聊放个模板系列】HDU 3068 MANACHER

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<cmath>
     8 using namespace std;
     9 #define Maxn 110010
    10 
    11 char s[Maxn];
    12 int l;
    13 int a[Maxn*2],al,p[Maxn*2];
    14 
    15 int mymin(int x,int y) {return x<y?x:y;} 
    16 int mymax(int x,int y) {return x>y?x:y;}
    17 
    18 void manacher()
    19 {
    20     int mx=0,id=0;
    21     for(int i=1;i<=al;i++)
    22     {
    23         int k;
    24         if(i<mx) k=mymin(p[2*id-i],mx-i+1);
    25         else k=1;
    26         while(a[i+k]==a[i-k]&&i-k>=1&&i+k<=al) k++;
    27         p[i]=k;
    28         if(i+p[i]-1>mx) mx=i+p[i]-1,id=i;
    29     }
    30 }
    31 
    32 int main()
    33 {
    34     while(scanf("%s",s+1)!=EOF)
    35     {
    36         l=strlen(s+1);
    37         al=0;
    38         for(int i=1;i<=l;i++) a[++al]=30,a[++al]=s[i]-'a'+1;
    39         a[++al]=30;a[++al]=31;
    40         manacher();
    41         int mx=0;
    42         for(int i=1;i<=al;i++) mx=mymax(mx,p[i]-1);
    43         printf("%d
    ",mx);
    44     }
    45     return 0;
    46 }

    马拉车

  • 相关阅读:
    BJDCTF-WP
    Python 每日一练(4)
    Python 每日一练(3)
    BUUCTF Crypto
    Python每日一练(1)
    Python 每日一练(2)
    oracle 组函数
    oracle 组函数
    oracle
    前端实战遇到问题
  • 原文地址:https://www.cnblogs.com/Konjakmoyu/p/6075260.html
Copyright © 2011-2022 走看看