COGS 2566. [51nod 1129] 字符串最大值
2024-08-27 07:01:47
★★★ 输入文件: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 ;
}
最新文章
- spring框架学习(六)AOP
- Raspberry pi(-) Mac下安装系统
- CSS3转换
- 从今天起,记录CEF使用开发心得经验
- linux下批量修改存有超大数据量IP文件中的IP内容以及去重排序
- ecshop第一讲之安装
- cocos2dx A*算法
- Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
- storm-kafka教程
- 从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化 以ios类成员函数方式格式化)
- OpenStack最新版本Folsom架构解析
- MongoDB优化与一些需要注意的细节
- Kubernetes — 深入解析Pod对象:基本概念(一)
- PHP之基本操作
- 9.3 翻译系列:数据注解特性之Key【EF 6 Code-First 系列】
- 阿里云Linux系统基线检查优化
- amazon建立基于centos的ec2
- 动态rem解决移动前端适配
- Maven构建项目时index.jsp文件报错
- [USACO 2017 Jan Gold] Tutorial
热门文章
- <;正则吃饺子>; :关于Guava中 Joiner 和 Splitter 的简单使用
- SparseArray浅析
- 2.9-2.10 hive中常见查询
- python模块datetime
- 二Java的常量与变量-1-1标识符
- HDU - 1019 - Least Common Multiple - 质因数分解
- webstrom打开多个项目,webstrom常用快捷键
- AtCoder Beginner Contest 087 D People on a Line(DFS)
- 51nod 1051【基础】
- 51nod1181【素数筛】