【题目描述】

一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: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果不其然只得60分

后来看了一下老师的题解发现根本不用跑KMP,

只要从后往前扫一遍将i和P[i]的值分别计算一下就可以

可是还是有两个点超时

搞了半天才发现原来三目运算符要比if快很多!!!!

坑爹啊。。。、,!!!!=.=

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[];
int p [];
int cs[];
int la,lb;
int ans=-;
void makep()
{
p[]=-;
int j=;
for(int i=;i<la;i++)
{
j=p[i-];
while(a[i]!=a[j+]&&j>=)j=p[j];
p[i]=a[i]==a[j+]?j+:-;
}
}
int main()
{
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
gets(a);
la=strlen(a);
makep();
for(int i=la-;i>=;i--)
{
cs[i]++;
cs[p[i]]+=cs[i];
if(cs[i]*(i+)>ans)
ans=cs[i]*(i+);
}
printf("%d",ans);
return ;
}

2566. [51nod 1129] 字符串最大值的更多相关文章

  1. COGS 2566. [51nod 1129] 字符串最大值

    ★★★   输入文件:string_maxval.in   输出文件:string_maxval.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 一个字符串的前缀是指包 ...

  2. [51nod 1129] 字符串最大值(kmp)

    传送门 题目大意 求一个字符串的前 缀出现次数乘以长度的最大值. 题解 暴力枚举每一个前缀求出现次数再乘以常数取最大 这样做会T几个点 看了老师的做法是任意前缀出现的次数,它的next也会出现这些次数 ...

  3. 51nod 1129 字符串最大值

    首先我们可以想到的是,既然求的是前缀的长度,就意味着一定是从1开始的,那么我们可以直接用下 标表示每一个前缀.但是可能存在几个前缀互相包含的情况,比如:abababa我们可以看见的是aba中包含着ab ...

  4. cogs 2566 字符串最大值

    2566. [51nod 1129] 字符串最大值 ★★   输入文件:string_maxval.in   输出文件:string_maxval.out   简单对比时间限制:1 s   内存限制: ...

  5. 51nod 1277 字符串中的最大值

    题目链接 51nod 1277 字符串中的最大值 题解 对于单串,考虑多串的fail树,发现next数组的关系形成树形结构 建出next树,对于每一个前缀,他出现的次数就是他子树的大小 代码 #inc ...

  6. 51Nod 1277 字符串中的最大值(KMP,裸题)

    1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: ...

  7. 51nod 1292 字符串中的最大值V2(后缀自动机)

    题意: 有一个字符串T.字符串S的F函数值可以如下计算:F(S) = L * S在T中出现的次数(L为字符串S的长度).求所有T的子串S中,函数F(S)的最大值. 题解: 求T的后缀自动机,然后所有每 ...

  8. 51nod 1277字符串中的最大值(拓展kmp)

    题意: 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值.   题解 ...

  9. 51Nod 1277 字符串中的最大值 ( KMP && DP )

    题意 : 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd.给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值.例如:S ...

随机推荐

  1. 检测SSL证书很好用的三个网站

    https://cryptoreport.websecurity.symantec.com/checker/views/certCheck.jsp https://cipherli.st/ https ...

  2. 「LuoguP1341」 无序字母对(欧拉回路

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  3. Mogodb 存储DateTime问题

    由于mogodb默认用的是国际日期utc和中国时间有8小时时差. c#当中利用特别属性来解决,如: /// <summary>        /// 创建日期        /// < ...

  4. Resistance

    题意: 给出一个由n个节点和m个二元电阻元件组成的电路,求问节点1到节点n的等效电阻. 解法: 应用电子电路分析中的基尔霍夫定律,对于每一个点有流量平衡,得 对于点$x$有 $$I_{出} + \su ...

  5. Laravel中的模型的创建

    <?phpnamespace App; use Illuminate\Database\Eloquent\Model; class Admin extends Model{ //指定表名 pro ...

  6. Mac中自定义文件夹中文名

    在OSX系统中,我们打开finer,就会看到很多中文名的文件夹,比如“应用程序”.“桌面”等等,而在系统中都是以英文命名的.我们也可以自己去设置中文名. 首先需要找到设置中文的字符串资源文件,路径是/ ...

  7. 梦工厂实验室 蛇形填数 dfs

    问题 D: 蛇形填数 时间限制: 3 Sec  内存限制: 64 MB提交: 28  解决: 5[提交][状态][讨论版] 题目描述 在n*n方阵里填入1,2,...,n*n,要求填成蛇形.例如n=4 ...

  8. Django - 导出项目依赖库到 requirements.txt

    两种方法: 虚拟环境: 使用 pip freeze pip freeze > requirements.txt # 这种方式推荐配合 virtualenv ,否则会把整个环境中的包都列出来. 只 ...

  9. webpack内置模块ProvidePlugin

    webpack配置ProvidePlugin后,在使用时将不再需要import和require进行引入,直接使用即可. 使用方法: 在webpack.dev.conf.js和webpack.prod. ...

  10. 洛谷 - P3786 - 萃香抱西瓜 - 状压dp

    重构一下就过了,不知道之前错在哪里. #include<bits/stdc++.h> using namespace std; typedef unsigned long long ull ...