暴力枚举大水题,判断回文,扩展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. Linux快捷指令

    Linux创建一个快捷指令,直接跳转到某个目录中的某个文件 创建快捷指令命令: $ ln -s 源目录 目标快捷方式 删除快捷指令命令: $ unlink 快捷方式名 eg:比如我想在 /usr 目录 ...

  2. oracle12C--DG 状态集

    一,物理备库 01,状态查询与状态详解 select switchover_status from v$database 02,状态转换到备用数据库 alter database commit to ...

  3. 【温故知新】c#抽象类abstract与接口interface

    1.什么是抽象类 先来看MSDN对抽象类描述: 抽象类是一些留有部分或全部成员未实现的类,以便可以由派生类来提供实现. 在面向对象的编程中,抽象类用作层次结构的基类,并表示不同对象类型组的通用功能.  ...

  4. filter 静态资源

    package com.itheima.web.filter; import java.io.IOException; import javax.servlet.Filter; import java ...

  5. pycharm Python解释器的配置--可以指定批处理文件为解释器

    这样就可以很方便的配置一些环境变量了,很方便很有创意的功能,再次Mark一下以防忘记

  6. winfrom 树勾选

    树勾选 /// <summary> /// 树勾选 /// </summary> /// <param name="sender"></p ...

  7. 运算符重载关键字operator

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

  8. 转载:.NET Memory Leak: XmlSerializing your way to a Memory Leak

    原文地址:http://blogs.msdn.com/b/tess/archive/2006/02/15/532804.aspx I hate to give away the resolution ...

  9. HDU 5012 骰子旋转(DFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 保存骰子的状态,然后用dfs或者bfs搜索 还是再讲一下dfs 我们的目标是找一个与b相同,且转次数最少的 ...

  10. ef linq 查询某时间段内数据 踩的坑

    var now = DateTime.Now;var list =db.Jinbi_TypeLimit.Where(x => x.IsAvailable && x.JinbiTy ...