COGS 2566. [51nod 1129] 字符串最大值
★★★ 输入文件: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 ;
}
COGS 2566. [51nod 1129] 字符串最大值的更多相关文章
- 2566. [51nod 1129] 字符串最大值
[题目描述] 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 例 ...
- [51nod 1129] 字符串最大值(kmp)
传送门 题目大意 求一个字符串的前 缀出现次数乘以长度的最大值. 题解 暴力枚举每一个前缀求出现次数再乘以常数取最大 这样做会T几个点 看了老师的做法是任意前缀出现的次数,它的next也会出现这些次数 ...
- 51nod 1129 字符串最大值
首先我们可以想到的是,既然求的是前缀的长度,就意味着一定是从1开始的,那么我们可以直接用下 标表示每一个前缀.但是可能存在几个前缀互相包含的情况,比如:abababa我们可以看见的是aba中包含着ab ...
- cogs 2566 字符串最大值
2566. [51nod 1129] 字符串最大值 ★★ 输入文件:string_maxval.in 输出文件:string_maxval.out 简单对比时间限制:1 s 内存限制: ...
- 51nod 1277 字符串中的最大值
题目链接 51nod 1277 字符串中的最大值 题解 对于单串,考虑多串的fail树,发现next数组的关系形成树形结构 建出next树,对于每一个前缀,他出现的次数就是他子树的大小 代码 #inc ...
- 51Nod 1277 字符串中的最大值(KMP,裸题)
1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: ...
- 51nod 1292 字符串中的最大值V2(后缀自动机)
题意: 有一个字符串T.字符串S的F函数值可以如下计算:F(S) = L * S在T中出现的次数(L为字符串S的长度).求所有T的子串S中,函数F(S)的最大值. 题解: 求T的后缀自动机,然后所有每 ...
- 51nod 1277字符串中的最大值(拓展kmp)
题意: 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 题解 ...
- 51Nod 1277 字符串中的最大值 ( KMP && DP )
题意 : 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd.给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值.例如:S ...
随机推荐
- OutputDebugString()输出调试的使用
- [hdu1277]全文检索(AC自动机)
解题关键:AC自动机模板题,注意字符匹配时若无法匹配,直接用%s即可. #include<bits/stdc++.h> using namespace std; typedef long ...
- ShutdownHook作用
源地址:http://kim-miao.iteye.com/blog/1662550 void java.lang.Runtime.addShutdownHook(Thread hook) 该方法用来 ...
- E20180603-hm
breadth n. 宽度; 宽容; (知识.兴趣等的) 广泛; depth n. 深度; 深处,深海; 深奥,奥妙; 进深; deep adj. 深的; 深远的,深奥; 重大的,深刻的; 强烈的 ...
- 简单安装与使用composer
1.下载composer.exe工具,然后进行安装 这一步需要找到你使用的php版本文件 2.windows+r cmd 输入composer 安装中国镜像,提高使用效率 https://p ...
- 2016 Noip提高组
2557. [NOIP2016]天天爱跑步 ★★☆ 输入文件:runninga.in 输出文件:runninga.out 简单对比时间限制:2 s 内存限制:512 MB [题目描述] ...
- maven - settings.xml文件详解
Settings.xml配置文件详解 maven默认的settings.xml是一个包含注释和例子的模板,可以快速的修改settings.xml文件 maven安装后不会在用户目录下自动生成setti ...
- 【TeamViewer】v13.2.26558版本 修改ID
TeamViewer是一款远程协作软件,可以让你在一台机器上操作另一台机器.比如我最近就经常在家里连接公司的电脑进行远程工作.可以说是对于程序员很好用的一个软件. TeamViewer 使用频繁后会被 ...
- JAVA列出某文件夹下的所有文件
import java.io.*; public class ListFiles { private static String s = ""; private static Bu ...
- 在centos7下搭建nginx环境,并配置负载均衡,最终能达到通过域名直接访问的目的
1.关于nginx:个人理解的nginx它的主要用途就是负载均衡,当然可能还有其他一些功能可能我们不长用到,我们通过nginx可以干什么呢?为什么要引入它呢?原因是当有高并发访问服务器时,服务器可能会 ...