KMP_Best Reward
大意:把一个字符串分成两串,假如一个字符串是回文串就可以加上它的VALUE,否则它的VALUE为0;
KMP的特点是可以求出前缀与后面的字符串是否匹配,
注意回文串的特点,所以当我们把回文串反转的时候会发现与前面的字符串匹配,
然后将字符串整个反转可以求出后缀的,
利用其特点可以快速判断回文串,
CODE;
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string.h>
#define N 500008
using namespace std;
typedef long long ll; char s[*N];
int next[*N];
int a[];
int sum[N*],pos[*N],pre[*N]; void get_next(char *s)//NEXT数组
{
next[]=-;
int k=-,i=;
int l=strlen(s);
while (i<l)
{
if (k==-||s[i]==s[k])
{
k++;i++;
next[i]=k;
}
else k=next[k];
}
} int main()
{
int cas;
scanf("%d",&cas); while (cas--)
{
memset(pos,,sizeof(pos));
memset(pre,,sizeof(pre));
for (int i=;i<;i++) scanf("%d",&a[i]);
scanf("%s",s); int len=strlen(s);
for (int i=;i<=len;i++) sum[i]=sum[i-]+a[s[i-]-'a'];//预先处理SUM数组,注意我们把A[I]的值移位了。
s[len]='#';
int k=len,l=len;
while (k) s[++l]=s[--k];//字符串反接在后面
s[++l]='\0';
get_next(s);
int dol=l;
while (next[dol]) {pre[next[dol]]=len+;dol=next[dol];}
for (int i=;i<len;i++)
swap(s[i],s[len++i]); get_next(s);
dol=l;
while (next[dol]) {pos[next[dol]]=len+;dol=next[dol];}; int ans=-;
for (int i=;i<len;i++)//核心代码,计算值
{
int ss=;
if (pre[i]==len+) ss+=sum[i];
if (pos[len-i]==len+) ss+=sum[len]-sum[i];
ans=max(ans,ss);
}
printf("%d\n",ans); }
return ;
}
KMP_Best Reward的更多相关文章
- ACM: hdu 2647 Reward -拓扑排序
hdu 2647 Reward Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- 扩展KMP --- HDU 3613 Best Reward
Best Reward Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3613 Mean: 给你一个字符串,每个字符都有一个权 ...
- 回文串---Best Reward
HDU 3613 Description After an uphill battle, General Li won a great victory. Now the head of state ...
- hdu 2647 Reward
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2647 Reward Description Dandelion's uncle is a boss o ...
- Reward
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdoj 2647 Reward【反向拓扑排序】
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Reward HDU
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32 ...
- Reward(拓扑结构+邻接表+队列)
Reward Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- HDU 3613 Best Reward 正反两次扩展KMP
题目来源:HDU 3613 Best Reward 题意:每一个字母相应一个权值 将给你的字符串分成两部分 假设一部分是回文 这部分的值就是每一个字母的权值之和 求一种分法使得2部分的和最大 思路:考 ...
随机推荐
- paypal api 相关资料
https://developer.paypal.com/ https://developer.paypal.com/docs/classic/api/merchant/GetBalance_API_ ...
- 如何在MySQL中获得更好的全文搜索结果
如何在MySQL中获得更好的全文搜索结果 很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录.在后台,这些程序使用在一个SELECT 查询中的LIKE语 ...
- xml结构
一.XmlHelper using System; using System.Collections.Generic; using System.Linq; using System.Web; usi ...
- WPF优化体验<一>
最近将一个开发和维护了五年的一个Winform项目进行重构,考虑到最近很流行将用户体验挂在嘴上,于是采用了WPF技术,希望能在外观和体验上有一个全新的效果. 以前使用Winform的时候内存控制得不错 ...
- ES5 vs ES6
ES5中 var React = require('react-native'); ES6中 import React from 'react-native'; .babelrc文件中添加一下内容 { ...
- 2天驾驭DIV+CSS (实战篇)(转)
这是去年看到的一片文章,感觉在我的学习中,有不少的影响.于是把它分享给想很快了解css的兄弟们.本文是实战篇. 基础篇[知识一] “DIV+CSS” 的叫法是不准确的[知识二] “DIV+CSS” ...
- Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板
1. 简单说明:在JSP 2.0后, 你不再需要大刀阔斧地定义一堆TagSupport或BodyTagSupport, 使用JSP Tag Files技术可以实现功能强大的页面模板技术. 在这里抛砖引 ...
- dev 激活没有权限问题
用管理员身份打开 Microsoft Visual Studio 2010-->Visual Studio Tools-->Visual Studio 命令提示(2010) 然后输入一下命 ...
- DataTemplate 以及Template Selector 学习笔记
1. 内容控件通过ContentTemplate,列表控件通过itemTemplate 来支持模板绑定.例子如下: 模板定义: xaml: <DataTemplate x:Key="R ...
- 主要从架构上来做优化,负载均衡、CDN、静态化、数据库的水平切割和纵向切割、读写分离、分布式缓存着手
语言知识一种工具,甚至技术本身也只是一种工具,本身并不值钱,关键在于用于何种行业,产生了什么价值. 但从语言来看,我个人更喜欢php,然后是C#,然后是java从框架而言,先是java,然后C#,再次 ...