HDU 3613 扩展KMP
暴力枚举大水题,判断回文,扩展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的更多相关文章
- hdu 3613 扩展kmp+回文串
题目大意:给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串(从左往右或者从右往左读,都一样),那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果 ...
- hdu 4333 扩展kmp+kmp重复字串去重
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 关于kmp next数组求最短重复字串问题请看:http://www.cnblogs.com/z ...
- HDU 3336 扩展kmp
题目大意: 找到字符串中所有和前缀字符串相同的子串的个数 对于这种前缀的问题,通常通过扩展kmp来解决 其实吧这是我第一次做扩展kmp的题目,原来确实看过这个概念,今天突然做到,所以这个扩展kmp的模 ...
- hdu 4333(扩展kmp)
题意:就是给你一个数字,然后把最后一个数字放到最前面去,经过几次变换后又回到原数字,问在这些数字中,比原数字小的,相等的,大的分别有多少个.比如341-->134-->413-->3 ...
- HDU 6153 扩展kmp
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total ...
- HDU 2594 扩展kmp模板题
题目大意: 给定两个字符串,在第一个字符串中找到一个最大前缀作为第二个字符串的后缀 #include <iostream> #include <cstdio> #include ...
- HDU 6153 A Secret(扩展KMP模板题)
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others) Total ...
- 扩展KMP --- HDU 3613 Best Reward
Best Reward Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3613 Mean: 给你一个字符串,每个字符都有一个权 ...
- HDU 3613 Best Reward 正反两次扩展KMP
题目来源:HDU 3613 Best Reward 题意:每一个字母相应一个权值 将给你的字符串分成两部分 假设一部分是回文 这部分的值就是每一个字母的权值之和 求一种分法使得2部分的和最大 思路:考 ...
随机推荐
- selenium原理和尝试
引用文章:https://www.cnblogs.com/Albert-Lee/p/6238866.html Selenium是一个自动化测试框架.因为它能够模拟人工操作,比如能在浏览器中点击按钮.在 ...
- python-URL转jpg图片
问题描述 有图片地址,可以在网页打开 URL:https://bdfile.bluemoon.com.cn/group2/M00/0A/BA/wKg_HlwzY1SAIdXDAAFyo-ZOLKQ39 ...
- (转)Python之文件读写
Python之文件读写 原文:https://www.cnblogs.com/huilixieqi/p/6494891.html 本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 ...
- 如何发布一个包到npm && 如何使用自己发布的npm包 && 如何更新发布到npm的package && 如何更新当前项目的包?
如何发布一个包到npm First 在https://www.npmjs.com注册一个账号. Second 编辑好项目,文件大致如下: 其中,gitignore可以如下: .DS_Store nod ...
- 【程序员技术练级】学习一门脚本语言 python(三)跟数据库打交道
接着上一篇,该篇讲述使用python对数据库进行基本的CRUD操作,这边以sqlite3为例子,进行说明.sqlite3 是一个非常轻型的数据库,安装和使用它是非常简单的,这边就不进行讲述了. 在py ...
- VS下如何建立一个新的MFC程序 网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8191036.html 这里不知道会不会有人是真的新手 新新手 不知道怎么 如何建立一个MFC ...
- Excel&&word&&PPT
1. Excel 1.1 制作下拉框 选中单元格或列--> 菜单"数据" --> "数据验证"-->"设置" --> ...
- javaweb九大个内置对象,四大域
9个内置对象如下: 1.session对象:会话对象 当客户端第一次访问服务器的页面时,web服务器会自动为该客户端创建一个session对象并分配一个唯一的id号 常常用它来在多个页面间共享数据,如 ...
- shell命令修改文件内容
有个 test.txt 文件内容为 hello tom,现在修改成 hello jerry,并保存到test2.txt sed 's/tom/jerry/g' test.txt >test2. ...
- 08.StreamReader和StreamWrite的学习
StreamReader和StreamWrite是用来操作字符的 namespace _21.对StreamReader和StreamWriter的学习 { class Program { stati ...