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 字符串最大值的更多相关文章

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

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

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

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

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

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

  4. 51nod 1129 字符串最大值

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

  5. 理解 Redis(3) - 字符串值

    正如前面所讲的, redis 的数据结构就是一系列的键值对键 -> printable ASCII (可打印的 ASCII 码, 最大值是 512MB)值 -> Primitives (基 ...

  6. MSSQL Sql加密函数 hashbytes 用法简介

    转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...

  7. EF 汇总函数使用注意事项Max()/Min()等

    一.字符串类型最大值 1.字符串类型的最大值,和数据库的字典排序最后一个相同,如果存在返回null //字符串最大值,是字典排序最后一个 string max1 = _context.students ...

  8. 【题解】[USACO12JAN]视频游戏的连击Video Game Combos

    好久没有写博客了,好惭愧啊……虽然这是一道弱题但还是写一下吧. 这道题目的思路应该说是很容易形成:字符串+最大值?自然联想到学过的AC自动机与DP.对于给定的字符串建立出AC自动机,dp状态dp[i] ...

  9. c程序设计语言第一章4

    (昨天网络出现了问题,导致这篇没来得及上传,再次补上,今晚照常上传笔记) 练习1.19编写函数r e v e r s e ( s )将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个 ...

随机推荐

  1. Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long错误

    Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be ...

  2. 基于ROBO-MAS多智能体自主协同 高频投影定位系统

  3. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  4. spark:distinct算子实现原理

    distinct的底层使用reducebykey巧妙实现去重逻辑 //使用reduceByKey或者groupbykey的shuffle去重思想rdd.map(key=>(key,null)). ...

  5. 20210107 - python 的Excel自动化

    1.前置条件:用python, 开发工具pycharm 2.安装包: pip install openpyxl,  该包支持:xlsx, 但是不支持xlrd.xlwt格式的文件 3.概念介绍: 一个e ...

  6. Docusaurus2 快速建站,发布 GitHub Pages

    Docusaurus2 可快速搭建文档.博客.官网等网站,并发布到 GitHub Pages, Serverless 等. 我们只需 Markdown 写写内容就行,也可直接编写 React 组件嵌入 ...

  7. ORA-32004解决办法

    ORA-32004 解释是: 产生问题的原因是一个过时的参数,这个参数是早在8i,9i中使用的,在11g中已经废掉了 这个参数就是pfile中的*.sql_trace 用spfile 生成一个pfil ...

  8. 实现所有SAP设备打印机并行打印

    SAP版本:ECC 6.0 701 1.如何实现所有SAP设备打印机并行打印? I.通过事务码:SPAD,进入假脱机管理初始屏幕.点击左上角的菜单中 配置(c)=>输出设备,进入SAP系统 输出 ...

  9. Spring Validation 验证

    基本配置 1.pom引入maven依赖 <dependency> <groupId>javax.validation</groupId> <artifactI ...

  10. 如何在 Blazor WebAssembly中 使用 功能开关

    微软Azure 团队开发的 功能管理 (Feature Management) 包 Microsoft.FeatureManagement可用于实现 功能开关,可以通过 功能开关 特性动态的改变应用程 ...