cogs 2566 字符串最大值
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
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
题意:找字符串的各个前缀在字符串中出现的次数,从而的到最大值。
开始认为就是求next[]然后用next[]求各个前缀在字符串中出现的次数,结果只有60分。后来看了其他同学的代码发现了这个比较巧妙的方法。即:任意前缀出现的次数,这个前缀的next(前缀的公共前后缀中的前缀)也会回出现这些次数。
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4
5 using namespace std;
6 const int maxl=1000010;
7 char s[maxl],su[maxl];
8 int next[maxl],l,ans=0,cs[maxl];
9 void getnext()
10 {
11 next[0]=-1;
12 l=strlen(s);
13 for(int j,i=1;i<l;i++)
14 {
15 j=next[i-1];
16 while(s[i]!=s[j+1]&&j>=0)j=next[j];
17 next[i]=s[i]==s[j+1]?j+1:-1;
18 }
19 }
20 int main()
21 {
22 freopen("string_maxval.in","r",stdin);
23 freopen("string_maxval.out","w",stdout);
24 scanf("%s",s);
25 getnext();
26 for(int i=l-1;i>=0;--i)
27 {
28 cs[i]++;
29 cs[next[i]]+=cs[i];
30 if(cs[i]*(i+1)>ans)ans=cs[i]*(i+1);
31 }
32 cout<<ans;
33 fclose(stdin);fclose(stdout);
34 return 0;
35 }
cogs 2566 字符串最大值的更多相关文章
- COGS 2566. [51nod 1129] 字符串最大值
★★★ 输入文件:string_maxval.in 输出文件:string_maxval.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 一个字符串的前缀是指包 ...
- 2566. [51nod 1129] 字符串最大值
[题目描述] 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 例 ...
- [51nod 1129] 字符串最大值(kmp)
传送门 题目大意 求一个字符串的前 缀出现次数乘以长度的最大值. 题解 暴力枚举每一个前缀求出现次数再乘以常数取最大 这样做会T几个点 看了老师的做法是任意前缀出现的次数,它的next也会出现这些次数 ...
- 51nod 1129 字符串最大值
首先我们可以想到的是,既然求的是前缀的长度,就意味着一定是从1开始的,那么我们可以直接用下 标表示每一个前缀.但是可能存在几个前缀互相包含的情况,比如:abababa我们可以看见的是aba中包含着ab ...
- 理解 Redis(3) - 字符串值
正如前面所讲的, redis 的数据结构就是一系列的键值对键 -> printable ASCII (可打印的 ASCII 码, 最大值是 512MB)值 -> Primitives (基 ...
- MSSQL Sql加密函数 hashbytes 用法简介
转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...
- EF 汇总函数使用注意事项Max()/Min()等
一.字符串类型最大值 1.字符串类型的最大值,和数据库的字典排序最后一个相同,如果存在返回null //字符串最大值,是字典排序最后一个 string max1 = _context.students ...
- 【题解】[USACO12JAN]视频游戏的连击Video Game Combos
好久没有写博客了,好惭愧啊……虽然这是一道弱题但还是写一下吧. 这道题目的思路应该说是很容易形成:字符串+最大值?自然联想到学过的AC自动机与DP.对于给定的字符串建立出AC自动机,dp状态dp[i] ...
- c程序设计语言第一章4
(昨天网络出现了问题,导致这篇没来得及上传,再次补上,今晚照常上传笔记) 练习1.19编写函数r e v e r s e ( s )将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个 ...
随机推荐
- mysql 提示 vcruntime140_1.dll丢失
百度网盘:https://pan.baidu.com/s/1vbVexHs1eRfGlnTbr8U53Q 提取码:59tm 将两个文件同时放到路径:C:\Windows\System32 下,运行ba ...
- Linux嵌入式学习-交叉编译openssl
利用arm-none-linux-gnueabi-gcc交叉编译openssl,生成静态库文件libcrypto.a ,libssl.a 1.从openssl官网下载openssl最新版本,我下载的是 ...
- volatile实现原理--为什么实现了可见性却不能保证原子性
本篇文章我们来解决一个问题 这也是面试面的比较多的问题,进阶阶段(高级)一般都会问到. volatile变量怎么保证可见性 为什么在并发情况下无法保证原子性? 比较懒了 摘了一段JVM原理的片段 ...
- Spring Cloud Hystrix原理篇(十一)
一.Hystrix处理流程 Hystrix流程图如下: Hystrix整个工作流如下: 构造一个 HystrixCommand或HystrixObservableCommand对象,用于封装请求,并在 ...
- eclipse下的jetty远程调试设置
在windows下的jetty远程调试设置1.首先说明的是windows下的jetty是通过命令java -jar start.jar来启动的,因此要想设置成远程调试模式,则要改用命令java -X ...
- CentOS8_在线安装_网络源_网络镜像源填写格式_以及其他笔记
CentOS8_在线安装_网络源_网络镜像源填写格式_以及其他笔记 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-1. 参考: Centos8.0.1905 在线安装源选择 ...
- tf.argmax(vector,axis)函数的使用
1.返回值 vector为向量,返回行或列的最大值的索引号: vector为矩阵,返回值是向量,返回每行或每列的最大值的索引号. 2.参数 vector为向量或者矩阵 axis = 0 或1 0:返回 ...
- Spring AOP之多切面运行顺序
多切面运行顺序 当一个方法的执行被多个切面共同切的时候,环绕通知只影响当前切面的通知顺序,例如创建两个切面logUtil,validateUtil两个切面共同监视计算器类的加法运算,add(int a ...
- SpringBoot对静态资源的映射规则
在WebMvcAutoConfiguration类中有相对应的方法addResourceHandlers public void addResourceHandlers(ResourceHandler ...
- 转载 - Ubuntu源改国内源 与 批量更改ubuntu机器apt源
change_apt_source.sh # !/bin/bash # 备份原来的源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak # 获取 ...