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<<"\n";
49     }
50     return 0;
51 }

原文地址:https://www.cnblogs.com/ldudxy/p/12530670.html

时间: 2024-11-05 12:22:49

Codeforces Global Round 7D(马拉车/PAM,回文串)的相关文章

Codeforces Round #427 (Div. 2) D. Palindromic characteristics(Manacher求回文串)

题目链接:Codeforces Round #427 (Div. 2) D. Palindromic characteristics 题意: 给你一个串,定义k-th回文串,让你求每个k-th的数量. 题解: manacher处理好后做一下dp就行了. 当然也可以直接dp不用manacher. 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 5 cons

字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串

Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行,为一个只包含小写字母(a -z)的非空字符串s. Output 输出一个整数,为逝查回文子串的最大出现值. Sample Input [样例输入l] abacaba [样例输入2] www Sample Output [样例输出l] 7 [样例输出2] 4 HINT 一个串是回文的,当且仅当它从左

马拉车,O(n)求回文串

body { font-family: sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px } body>*:first-child { margin-top: 0 !important } body>*:last-child { margin-bottom: 0 !important } a

Codeforces Global Round 1 (A-E题解)

Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^(k-1)+a2*b^(k-2)+...+ak*b^0的奇偶性. 题解: 暴力求模2意义下的值就好了. 代码如下: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5+5; int

【手抖康复训练1 】Codeforces Global Round 6

[手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思路手抖过不了样例,C题秒出思路手抖过不了样例*3 D题 手抖 过的了样例 ,调了1h,赛后发现变量名写错了,改一个字符就能AC... 题目等补完题一起放上来QAQ 原文地址:https://www.cnblogs.com/ttttttttrx/p/12110199.html

Codeforces Global Round 7

传送门 A. Bad Ugly Numbers 233333. Code /* * Author: heyuhhh * Created Time: 2020/3/19 22:36:37 */ #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <cmath> #include <set> #include <

Codeforces Global Round 7【ABCD】(题解)

目录 涵盖知识点:思维.构造.马拉车. 比赛链接:传送门 D题只有数据范围的区别,故只写D2. 好多题啊,随缘更新.(其实懒得写) A - Bad Ugly Numbers B - Maximums C - Permutation Partitions D2 - Prefix-Suffix Palindrome (Hard version) 涵盖知识点:思维.构造.马拉车. 比赛链接:传送门 D题只有数据范围的区别,故只写D2. 好多题啊,随缘更新.(其实懒得写) A - Bad Ugly Nu

Codeforces Beta Round #7--D. Palindrome Degree(Manacer)

题目:http://blog.csdn.net/winddreams/article/details/44218961 求出每一个点为中心的最长字符串,推断该串是不是从开头的回文串. #include <cstdio> #include <cstring> #include <algorithm> using namespace std ; int p[12000000] , dp[6000000]; char s[12000000] , str[12000000] ;

YZOI Easy Round 2_回文串 string

原文链接:http://laphets1.gotoip3.com/?id=18 Description 给出一个由小写字母组成的字符串,其中一些字母被染黑了,用?表示.已知原来的串不是 一个回文串,现在让你求出字典序最小的可能的串.像’a’,’aba’,’abba’这样对称的串叫做回 文串. 每个测试点有5 组小测试点. Input 5 行,5 个字符串. Output 5 行,5 个字符串.若无解,输出”Orz,I can not find it!” 这个题目主要就是利用了一种贪心的思想  总