• Codeforces Global Round 7D(马拉车/PAM,回文串)


     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int maxi,R,pos,ans_pos,p[2000007];
     5 string str,ans_str,tmp;
     6 void Manacher(string s){//马拉车模板,p数组存放当前位置为轴回文串的最大长度
     7     int siz=s.size();
     8     memset(p,0,sizeof(int[siz]));
     9     R=pos=0;
    10     for(int i=1;i<siz;++i){
    11         if(i<R)
    12             p[i]=min(p[2*pos-i],R-i);
    13         else
    14             p[i]=1;
    15         while(i-p[i]>=1&&i+p[i]<siz&&s[i-p[i]]==s[i+p[i]])
    16             ++p[i];
    17         if(i+p[i]>R)
    18             R=i+p[i],pos=i;
    19     }
    20 }
    21 int main(){
    22     ios::sync_with_stdio(false);
    23     cin.tie(NULL);
    24     cout.tie(NULL);
    25     int t;
    26     cin>>t;
    27     while(t--){
    28         maxi=0;
    29         cin>>str;
    30         int siz=str.size(),pnt=0;
    31         while(pnt<siz-1-pnt&&str[pnt]==str[siz-1-pnt])
    32             ++pnt;
    33         tmp="%#";
    34         for(int i=pnt;i<siz-pnt;++i)
    35             tmp+=str[i],tmp+='#';
    36         Manacher(tmp);
    37         int tmp_siz=tmp.size();
    38         for(int i=1;i<tmp_siz;++i)
    39             if((i-p[i]==0||i+p[i]==tmp_siz)&&p[i]>maxi)
    40                 maxi=p[i],ans_pos=i;//找到最长的回文串长度及轴的位置
    41         ans_str="";
    42         for(int i=0;i<pnt;++i)
    43             ans_str+=str[i];
    44         for(int i=ans_pos-p[ans_pos]+1+1;i<=ans_pos+p[ans_pos]-1;i+=2)
    45             ans_str+=tmp[i];
    46         for(int i=pnt-1;i>=0;--i)
    47             ans_str+=str[i];
    48         cout<<ans_str<<"
    ";
    49     }
    50     return 0;
    51 }

     

  • 相关阅读:
    堆栈的分布
    Socket网络编程(TCP/IP/端口/类)和实例
    c语言字节对齐
    理一理字节对齐的那些事
    Socket网络编程(TCP/IP/端口/类)和实例
    socket、端口、进程的关系
    SMT32 启动文件详细解说
    Chapter 1 First Sight——22
    Leetcode389
    Chapter 1 First Sight——21
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12530670.html
Copyright © 2020-2023  润新知