暴力枚举大水题,判断回文,扩展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. python3 模块安装列表

    pip install scrapy pip install twisted pip install BeautifulSoup4 pip install lxml pip install Pillo ...

  2. oracle 基础知识(十四)----索引扫描

    (1)索引唯一扫描(index unique scan) 通过唯一索引查找一个数值经常返回单个ROWID.如果该唯一索引有多个列组成(即组合索引),则至少要有组合索引的引导列参与到该查询中,如创建一个 ...

  3. Linux下Tomcat如何传入'$'符号

    在实际的工作中,有同事有需求要在Tomcat的启动脚本中添加启动参数,而且启动参数中带有特殊的字符'$',在实际的应用程序中,使用System.getProperty()进行获取设置的值,但是这个字符 ...

  4. ife task0003学习笔记(三):JavaScript闭包

    一.this易错分析 在学习闭包的时候,有一个概念this很重要,关于this的理解,下面3种情况:this指向谁? fn.call(obj1); obj2.fn() fn() 答案是obj1 obj ...

  5. ionic 打包安卓包 (debug调试版和 release发布版)

    一.配置环境: 先按照之前的文章,配置好环境需要: 安装jdk,配置环境变量:( http://www.cnblogs.com/loveyaxin/p/7520618.html) 安装android- ...

  6. Sublime Text加上Eclipse

    打造属于自己的前端开发神器 -- 给Sublime Text加上Eclipse的光环     将Sublime Text打造成如Eclipse一般的前端开发IDE 1. 快捷键移植篇   从Java开 ...

  7. mongo 多条件or

    or语句 or b=2 > db.XXX.find({"$or":[{"a":1}, {"b":2}]});  等于java mong ...

  8. Halcon学习笔记——机器视觉应用工程开发思路及相机标定

    机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...

  9. 每隔5s执行一次动作

    TimeSpan timespan; //第一次获取系统时间 DateTime d1 = DateTime.Now; while (true) { //第二次获取系统时间 DateTime d2 = ...

  10. node express formidable 文件上传后修改文件名

    //我是用php的思想来学习nodejs var express = require('express'); var router = express.Router(); var fs = requi ...