传送门

题目大意

求一个字符串的前

缀出现次数乘以长度的最大值。

题解

暴力枚举每一个前缀求出现次数再乘以常数取最大 这样做会T几个点

看了老师的做法是任意前缀出现的次数,它的next也会出现这些次数

代码

暴力

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[];
int nex[],len;
long long max_ans;
void getnext(){
for(int i=,j=;i<=len;i++){//从2开始啊,扎心了老铁
while(s[i]!=s[j+]&&j)j=nex[j];
if(s[i]==s[j+])nex[i]=++j;
}
}
void slove(int k){
int js=;
for(int i=,j=;i<=len;i++){
while(s[i]!=s[j+]&&j)j=nex[j];
if(s[i]==s[j+])++j;
if(j==k){
js++;j=nex[j];
}
}
// cout<<k<<" "<<js<<" "<<js*k<<endl;
max_ans=max(max_ans,(long long)js*k);
}
int main(){
ios::sync_with_stdio();
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
scanf("%s",s+);
len=strlen(s+);
getnext();
for(int i=;i<=len;i++)slove(i);
printf("%lld\n",max_ans);
return ;
}

第二种方法

#include<cstdio>
#include<iostream>
#include<cstring> using namespace std;
const int maxl=;
char s[maxl],su[maxl];
int next[maxl],l,ans=,cs[maxl];
void getnext()
{
next[]=-;
l=strlen(s);
for(int j,i=;i<l;i++)
{
j=next[i-];
while(s[i]!=s[j+]&&j>=)j=next[j];
next[i]=s[i]==s[j+]?j+:-;
}
}
int main()
{
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
scanf("%s",s);
getnext();
for(int i=l-;i>=;--i)
{
cs[i]++;
cs[next[i]]+=cs[i];
if(cs[i]*(i+)>ans)ans=cs[i]*(i+);
}
cout<<ans;
fclose(stdin);fclose(stdout);
return ;
}

[51nod 1129] 字符串最大值(kmp)的更多相关文章

  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 字符串最大值

    首先我们可以想到的是,既然求的是前缀的长度,就意味着一定是从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. c算法:字符串查找-KMP算法

    /* *用KMP算法实现字符串匹配搜索方法 *该程序实现的功能是搜索本目录下的所有文件的内容是否与给定的 *字符串匹配,如果匹配,则输出文件名:包含该字符串的行 *待搜索的目标串搜索指针移动位数 = ...

  7. 算法数据结构 | 只要30行代码,实现快速匹配字符串的KMP算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法数据结构专题的第29篇文章,我们来聊一个新的字符串匹配算法--KMP. KMP这个名字不是视频播放器,更不是看毛片,它其实是由Kn ...

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

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

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

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

随机推荐

  1. 安装 node-sass 的不成功

    昨天安装项目依赖的包,差不多都装好了,然后就卡在了node-sass上,各种报错. 报错一.gyp ERR! stack Error: Can't find Python executable &qu ...

  2. [bzoj3308]九月的咖啡店_欧拉筛素数_费用流

    bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...

  3. 因chmod /usr致使raspberryPi重装

    一.系统安装noobs 设置用户名及密码,设置超级用户root密码:  sudo passwd root,回车后按提示输入两次root的密码(注意,输入时是不会提示*号的,直接输入即可) 二.源及软件 ...

  4. Spring 详解(二)------- AOP关键概念以及两种实现方式

    目录 1. AOP 关键词 2. AOP 的作用 3. AOP 的通知类型 4. 基于 xml 的配置方式 5. 基于注解的配置方式 6. 切面的优先级 7. 重用切点表达式 8. 两种方式的比较(摘 ...

  5. Spring拦截器从Request中获取Json格式的数据

    7 package com.newpp.core.interceptor; 8 9 import java.io.BufferedReader; 10 import java.io.ByteArray ...

  6. Matlab中配置VLFeat

    在VLFeat官网上是这么介绍VLFeat的:VLFeat开源库实现了很多著名的机器视觉算法,如HOG, SIFT, MSER, k-means, hierarchical k-means, aggl ...

  7. centos 複製時顯示進度的指令 pv

    Pipe Viewer 的简称pv:意思是通过管道显示数据处理进度的信息.这些信息包括已经耗费的时间,完成的百分比(通过进度条显示),当前的速度,全部传输的数据,以及估计剩余的时间. yum inst ...

  8. cocos2d-x-3.6 引擎概述

    cocos2d-x是一个游戏开发引擎,从公布到如今也有五六年了,一路看它慢慢壮大.它是如今应用最多的开源2d引擎,没有之中的一个,据说已经占据90%的市场,所以.对于想从事游戏开发的童鞋来说还是有必要 ...

  9. hdu 1679 The Unique MST (克鲁斯卡尔)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24152   Accepted: 8587 D ...

  10. mysql 安装与配置、使用

    http://www.cnblogs.com/shenliang123/p/3203546.html CentOs中mysql的安装与配置 在linux中安装数据库首选MySQL,Mysql数据库的第 ...