★★★   输入文件:string_maxval.in   输出文件:string_maxval.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。

给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。

例如:S = "abababa" 所有的前缀如下:

"a", 长度与出现次数的乘积 1 * 4 = 4,

"ab",长度与出现次数的乘积 2 * 3 = 6,

"aba", 长度与出现次数的乘积 3 * 3 = 9,

"abab", 长度与出现次数的乘积 4 * 2 = 8,

"ababa", 长度与出现次数的乘积 5 * 2 = 10,

"ababab", 长度与出现次数的乘积 6 * 1 = 6,

"abababa", 长度与出现次数的乘积 7 * 1 = 7. 其中"ababa"出现了2次,二者的乘积为10,是所有前缀中最大的

【输入格式】

输入字符串T, (1 <= L <= 1000000, L为T的长度),T中的所有字符均为小写英文字母。 (注意:原题是L <= 10W,这里加强一下!)

【输出格式】

输出所有前缀中字符长度与出现次数的乘积的最大值。

【样例输入】

abababa

【样例输出】

10

【提示】

【来源】

kmp的next数组

用res[i]记录长度为i的前缀出现的次数 显然res[len]=1;

由于Next[i]记录的是[0,i]中后缀与前缀重复的最长长度,那么长的前缀出现 短的前缀也会出现 ,那么只需O(n)统计一下就好

51nod上需要I64d才能过

屠龙宝刀点击就送

#include <iostream>
#include <cstring>
#include <cstdio>
#define N 1000100
using namespace std;
char str[N];
int res[N],Next[N],len;
void Get_Next()
{
int i=,j=-;
Next[i]=j;
for(;i<len;)
{
if(j==-||str[i]==str[j])
{
i++;
j++;
Next[i]=j;
}
else j=Next[j];
}
}
int main()
{
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
scanf("%s",str);
len=strlen(str);
Get_Next();
for(int i=len;i>=;i--)
{
res[i]++;
res[Next[i]]+=res[i];
}
long long Maxn=;
for(long long i=;i<=len;i++)
Maxn=max(Maxn,res[i]*i);
printf("%I64d ",Maxn);
return ;
}

最新文章

  1. spring框架学习(六)AOP
  2. Raspberry pi(-) Mac下安装系统
  3. CSS3转换
  4. 从今天起,记录CEF使用开发心得经验
  5. linux下批量修改存有超大数据量IP文件中的IP内容以及去重排序
  6. ecshop第一讲之安装
  7. cocos2dx A*算法
  8. Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
  9. storm-kafka教程
  10. 从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化 以ios类成员函数方式格式化)
  11. OpenStack最新版本Folsom架构解析
  12. MongoDB优化与一些需要注意的细节
  13. Kubernetes — 深入解析Pod对象:基本概念(一)
  14. PHP之基本操作
  15. 9.3 翻译系列:数据注解特性之Key【EF 6 Code-First 系列】
  16. 阿里云Linux系统基线检查优化
  17. amazon建立基于centos的ec2
  18. 动态rem解决移动前端适配
  19. Maven构建项目时index.jsp文件报错
  20. [USACO 2017 Jan Gold] Tutorial

热门文章

  1. &lt;正则吃饺子&gt; :关于Guava中 Joiner 和 Splitter 的简单使用
  2. SparseArray浅析
  3. 2.9-2.10 hive中常见查询
  4. python模块datetime
  5. 二Java的常量与变量-1-1标识符
  6. HDU - 1019 - Least Common Multiple - 质因数分解
  7. webstrom打开多个项目,webstrom常用快捷键
  8. AtCoder Beginner Contest 087 D People on a Line(DFS)
  9. 51nod 1051【基础】
  10. 51nod1181【素数筛】