不得不说这是一道好题(前排膜拜灯教授),其实这道题如果不说是EXKMP,很容易就想到Manacher(好像也可以这样做)

回到这道题,这样只有一个字符串,还要求回文?立刻想到了将这个串和它的反串跑EXKMP,举个例子:
假设字符串s[0]是acacac,那它的反串s[1]就是cacaca,互相跑EXKMP就有:
ex[0]={0,0,5,0,3,0,1}//这里的定义是以s[0]为模版串
ex[1]={0,0,5,0,3,0,1}
然后就可以枚举断的地方,假设a|cacac i=2
那定义一个j等于len-(i-1)+1就指向cacaca的最后一个a,等于6,然后得到ex[1][6]有多少个匹配的,当然了,6+ex[1][6]-1要等于len才行,不然这两个串就不是完全匹配的了。同理i后面的cacac也是这样搞,(当然你可以像灯教授和肉丝鸡掌一样搞个前缀和什么的省时间 %%%%%)

然而昨天灯教授故意卡了我,搞得我现在又要改成用前缀和了。。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[];
char s[][];
int p[][],ex[][];
void exkmp(int len,int w)
{
int x,k;
p[-w][]=len;
x=;while(s[-w][x]==s[-w][x+]&&x<=len)x++;
p[-w][]=x-;k=;
for(int i=;i<=len;i++)
{
int P=k+p[-w][k]-,L=p[-w][i-k+];
if(i-k+L<P-k+)p[-w][i]=L;
else
{
int j=max(P-i+,);
while(s[-w][+j]==s[-w][i+j]&&i+j<=len)j++;
p[-w][i]=j;k=i;
}
} x=;while(s[w][x]==s[-w][x]&&x<=len)x++;
ex[w][]=x-;k=;
for(int i=;i<=len;i++)
{
int P=k+ex[w][k]-,L=p[-w][i-k+];
if(i-k+L<P-k+)ex[w][i]=L;
else
{
int j=max(P-i+,);
while(s[-w][+j]==s[w][i+j]&&i+j<=len)j++;
ex[w][i]=j;k=i;
}
}
}
int qz[][];
void getsum(int len)
{
int ans=,ss,x,tp;
for(int i=;i<=len;i++)
{
ss=;int j=len-(i-)+;
if(j+ex[][j]-==len)ss+=qz[][ex[][j]];
if(i+ex[][i]-==len)ss+=qz[][ex[][i]];
if(ss>ans)ans=ss;
}
printf("%d\n",ans);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
for(int i=;i<=;i++)scanf("%d",&a[i]);
scanf("%s",s[]+);int len=strlen(s[]+);
for(int i=;i<=len;i++)s[][i]=s[][len-i+];
qz[][]=;qz[][]=;
for(int i=;i<=len;i++)
{
qz[][i]=qz[][i-]+a[s[][i]-'a'+];
qz[][i]=qz[][i-]+a[s[][i]-'a'+];
} exkmp(len,);exkmp(len,);
getsum(len);
}
return ;
}

caioj1462: 【EXKMP】回文串的更多相关文章

  1. Extend to Palindrome UVA - 11475(补成回文串)

    题意: 就是用最少的字符把原字符串补成回文串 解析: emm/.../网上都是用kmp和后缀数组做的 我没想到这俩的思路...emmm... 想到了exkmp的  就是原串和逆串匹配一下  注意要保证 ...

  2. [LeetCode] Longest Palindrome 最长回文串

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

  3. [LeetCode] Shortest Palindrome 最短回文串

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  4. [LeetCode] Palindrome Partitioning II 拆分回文串之二

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  5. [LeetCode] Palindrome Partitioning 拆分回文串

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  6. [LeetCode] Longest Palindromic Substring 最长回文串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  7. bzoj 3676 回文串 manachar+hash

    考虑每个回文串,它一定是它中心字母的最长回文串两侧去掉同样数量的字符后的一个子串. 所以我们可以用manachar求出每一位的回文半径,放到哈希表里并标记出它的下一个子串. 最后拓扑排序递推就行了.. ...

  8. BZOJ 3676: [Apio2014]回文串

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2013  Solved: 863[Submit][Status ...

  9. SPOJ - PLSQUARE Palin Squar(hash+回文串)

    题意:给你一个n*n (n<=200)的字符串矩阵,问你每行每列都是回文串的最大的m*m的矩阵是多少 题解:首先答案不满足单调性,即m成立而m-1与m+1都却不一定成立,所以必须枚举答案确定现在 ...

  10. 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题

    先要搞明白:最长公共子串和最长公共子序列的区别.    最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...

随机推荐

  1. tomcat设置去项目路径

    1. 新建一个目录专门用于存放工程, 如: G:\apache-tomcat-6.0.20\project 2. 将工程存放到以上目录下:即:G:\apache-tomcat-6.0.20\proje ...

  2. VMware---之网卡设置

    闲来无事,扯点皮,详细说下NAT配置过程 NAT全称Network Address Translation网络地址转换,顾名思义,配置的重点也是地址转换. 步骤1.配置局域网段及网关 打开vmware ...

  3. 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证)

    一.前言 在各种Tomcat相关书籍,书上都提到了其类加载器结构: 在Tomcat 7或者8中,共享类和Catalina类加载器在catalina.properties中都是没配置的,请看: 所以,c ...

  4. MySql将查询结果插入到另外一张表

    今天遇到一个业务需求是这样的:对在职员工超过55岁提醒.我想的思路是查询员工表,然后将超过55岁的人的信息存到另一个表,并且以消息的形式给用户提示,用户处理掉之后此消息失效(在数据库做标记). 不管是 ...

  5. MySQL 中 key, primary key ,unique key,index的区别

    一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_n ...

  6. linux命令netstat或ifconfig未找到

    linux命令netstat或ifconfig未找到 linux使用netstat或者ifconfig命令时,显示命令未找到.通过yum search netstat这个命令,匹配结果如下:===== ...

  7. OC-为何用copy修饰block

    简单来说,block就像一个函数指针,指向我们要使用的函数. 就和函数调用一样的,不管你在哪里写了这个block,只要你把它放在了内存中(通过调用存在这个block的方 法或者是函数),不管放在栈中还 ...

  8. AC日记——最大子段和 洛谷 P1115

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...

  9. easyui combobox模糊查询

    用easyui框架开发的攻城狮恐怕都遇到过这样一个问题,就是在新增页面combobox下拉框需要支持模糊查询,但是输入不是combobox中Data里面的值的时候,点击保存,依然是可以新增进去的,这样 ...

  10. tech blog link

    http://amitsaha.github.io/site/notes/index.html