暴力枚举大水题,判断回文,扩展KMP

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn = ; int a[];
char str[];
char str1[];
int s[]; int _next[maxn],_extend[maxn];
int next1[maxn],extend1[maxn]; void getnext(char *T) {
int a = ;
int Tlen = strlen(T);
_next[] = Tlen;
while(a<Tlen-&&T[a]==T[a+]) a++;
_next[] = a; a = ;
for(int k=; k < Tlen; k++) {
int p = a + _next[a] - ,L = _next[k-a];
if((k-)+L>=p) {
int j = (p-k+) > ? p - k + : ;
while(k+j<Tlen&&T[k+j]==T[j])
j++;
_next[k] = j;
a = k;
}
else _next[k] = L;
}
} void getextend(char *S,char *T) {
int a = ;
getnext(T); int Slen = strlen(S);
int Tlen = strlen(T); int Minlen = Slen < Tlen ? Slen : Tlen;
while(a<Minlen&&S[a]==T[a]) a++;
_extend[] = a;
a = ; for(int k = ; k < Slen; k++) {
int p = a + _extend[a] - ,L = _next[k-a];
if((k-)+L>=p) {
int j = (p-k+) > ? p - k + : ;
while(k+j<Slen&&j<Tlen&&S[k+j]==T[j]) j++;
_extend[k] = j;
a = k;
}
else
_extend[k] = L;
} } void getnext1(char *T) {
int a = ;
int Tlen = strlen(T);
next1[] = Tlen;
while(a<Tlen-&&T[a]==T[a+]) a++;
next1[] = a; a = ;
for(int k=; k < Tlen; k++) {
int p = a + next1[a] - ,L = next1[k-a];
if((k-)+L>=p) {
int j = (p-k+) > ? p - k + : ;
while(k+j<Tlen&&T[k+j]==T[j])
j++;
next1[k] = j;
a = k;
}
else next1[k] = L;
}
} void getextend1(char *S,char *T) {
int a = ;
getnext1(T); int Slen = strlen(S);
int Tlen = strlen(T); int Minlen = Slen < Tlen ? Slen : Tlen;
while(a<Minlen&&S[a]==T[a]) a++;
extend1[] = a;
a = ; for(int k = ; k < Slen; k++) {
int p = a + extend1[a] - ,L = next1[k-a];
if((k-)+L>=p) {
int j = (p-k+) > ? p - k + : ;
while(k+j<Slen&&j<Tlen&&S[k+j]==T[j]) j++;
extend1[k] = j;
a = k;
}
else
extend1[k] = L;
} } int main() {
int T;
scanf("%d",&T);
while(T--) { for(int i = ; i < ; i++)
scanf("%d",&a[i]); scanf("%s",str); int len = strlen(str); s[] = a[ str[] - 'a' ];
for(int i = ; i < len; i++)
s[i] = s[i-] + a[ str[i]-'a' ]; for(int i = ; i < len; i++)
str1[i] = str[len-i-]; getextend(str1,str);
getextend1(str,str1); int ans = ;
for(int i = ; i < len-; i++)
{
if(_extend[len-i-]==i+&&extend1[i+]==len-i-)
ans = max(ans,s[len-]);
else if(_extend[len-i-]==i+)
ans = max(ans,s[i]);
else if(extend1[i+]==len-i-)
ans = max(ans,s[len-]-s[i]);
} printf("%d\n",ans);
}
return ;
}

HDU 3613 扩展KMP的更多相关文章

  1. hdu 3613 扩展kmp+回文串

    题目大意:给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串(从左往右或者从右往左读,都一样),那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果 ...

  2. hdu 4333 扩展kmp+kmp重复字串去重

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 关于kmp next数组求最短重复字串问题请看:http://www.cnblogs.com/z ...

  3. HDU 3336 扩展kmp

    题目大意: 找到字符串中所有和前缀字符串相同的子串的个数 对于这种前缀的问题,通常通过扩展kmp来解决 其实吧这是我第一次做扩展kmp的题目,原来确实看过这个概念,今天突然做到,所以这个扩展kmp的模 ...

  4. hdu 4333(扩展kmp)

    题意:就是给你一个数字,然后把最后一个数字放到最前面去,经过几次变换后又回到原数字,问在这些数字中,比原数字小的,相等的,大的分别有多少个.比如341-->134-->413-->3 ...

  5. HDU 6153 扩展kmp

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total ...

  6. HDU 2594 扩展kmp模板题

    题目大意: 给定两个字符串,在第一个字符串中找到一个最大前缀作为第二个字符串的后缀 #include <iostream> #include <cstdio> #include ...

  7. HDU 6153 A Secret(扩展KMP模板题)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others) Total ...

  8. 扩展KMP --- HDU 3613 Best Reward

    Best Reward Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3613 Mean: 给你一个字符串,每个字符都有一个权 ...

  9. HDU 3613 Best Reward 正反两次扩展KMP

    题目来源:HDU 3613 Best Reward 题意:每一个字母相应一个权值 将给你的字符串分成两部分 假设一部分是回文 这部分的值就是每一个字母的权值之和 求一种分法使得2部分的和最大 思路:考 ...

随机推荐

  1. 文献综述七:基于SSM的网上商城的开发与设计

    一.基本信息 标题:基于SSM的网上商城的开发与设计 时间:2018 出版源:Computer Knowledge and Technology 文件分类:对框架的研究 二.研究背景 为了解决现在电商 ...

  2. 数据库nomount mount open阶段走向

    先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance)由共享内存(SGA)和后 ...

  3. flask综合整理2

    session功能 首先我们知道session可以理解是一把钥匙,它存在在服务器上,其实在flask中也有session 1.系统自带的session from flask import sessio ...

  4. OSG DB的插件地址设置

    今天搞了一整天OSG,结果每次都说could not find plugin,就是说找不到OSG的插件去加载文件,我大概看了下OSG的插件机制,发现他是用插件的形式下去读取文件的 http://blo ...

  5. cloudera manager的7180 web界面访问不了的解决办法(图文详解)

    说在前面的话 我的机器是总共4台,分别为ubuntucmbigdata1.ubuntucmbigdata2.ubuntucmbigdata3和ubuntucmbigdata4.(注意啦,以下是针对Ub ...

  6. python pickle命令执行与marshal 任意代码执行

    1.python pickle反序列化漏洞 自己的理解: 由于在类的__reduce__方法中提供了我们可以自定义程序如何去解序列化的方法,因此如果应用程序接受了不可信任的序列化的数据,那么就可能导致 ...

  7. 在浏览器中对访问的网页中的cookie添加和修改

    做权限相关的东西,使用到了cookie,关于它的安全性,cookie在浏览器中,通过插件是可以对其进行修改的,如下: 1.FireFox 安装Edit This Cookie 插件,之后点击插件图标即 ...

  8. [转]什么?你还不会写JQuery 插件

    本文转自:http://www.cnblogs.com/joey0210/p/3408349.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jque ...

  9. hashlib库的使用

    这个模块实现了许多不同的安全哈希和消息摘要算法的通用接口.包括FIPS安全哈希算法SHA1.SHA224.SHA256.SHA384和SHA512(在FIPS 180-2中定义)以及RSA的MD5算法 ...

  10. 运算符重载关键字operator

    operator关键字用来重载内置运算符,使用方法如下: public class OperatorController : Controller { // // GET: /Operator/ pu ...