[51nod 1129] 字符串最大值(kmp)
题目大意
求一个字符串的前
缀出现次数乘以长度的最大值。
题解
暴力枚举每一个前缀求出现次数再乘以常数取最大 这样做会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)的更多相关文章
- 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 字符串最大值
首先我们可以想到的是,既然求的是前缀的长度,就意味着一定是从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 ...
- c算法:字符串查找-KMP算法
/* *用KMP算法实现字符串匹配搜索方法 *该程序实现的功能是搜索本目录下的所有文件的内容是否与给定的 *字符串匹配,如果匹配,则输出文件名:包含该字符串的行 *待搜索的目标串搜索指针移动位数 = ...
- 算法数据结构 | 只要30行代码,实现快速匹配字符串的KMP算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法数据结构专题的第29篇文章,我们来聊一个新的字符串匹配算法--KMP. KMP这个名字不是视频播放器,更不是看毛片,它其实是由Kn ...
- 51Nod 1277 字符串中的最大值(KMP,裸题)
1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: ...
- 51nod 1277字符串中的最大值(拓展kmp)
题意: 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 题解 ...
随机推荐
- 关于css虚线
今天遇到几个虚线效果,不能一下子反应过来具体属性. 一.dashed和dotted的区别 首先是dashed和dotted都是指“虚线”,但是两者显示的效果不尽相同. 从字面意思来看, dashed: ...
- codevs——1958 刺激
1958 刺激 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description saffah的一个朋友S酷爱滑雪,并且追求刺 ...
- 使用git 高效多人合作
复习一下... 附加学习链接: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/) ...
- 简单、强大的swig.js
Swig.js A simple, powerful, and extendable JavaScript Template Engine. 简单概括:JS模板引擎. Why to use 根据路劲渲 ...
- ZT:CSS实现水平|垂直居中漫谈
有篇博客园网友‘云轩奕鹤’的文章不错,转载在这里以供需要时查阅. http://www.cnblogs.com/jadeboy/p/5107471.html
- RecyclerView的万能切割线
效果图: 用法: 加入默认切割线:高度为2px.颜色为灰色 mRecyclerView.addItemDecoration(new RecycleViewDivider(mContext, Linea ...
- EBS OAF开发中怎样实现功能页签(Global Tab)
EBS OAF开发中怎样实现功能页签(Global Tab) (版权声明.本人原创或者翻译的文章如需转载.如转载用于个人学习,请注明出处.否则请与本人联系,违者必究) 功能页签的实现不须要不论什么编码 ...
- 安卓自带下拉刷新SwipeRefreshLayout加入上拉刷新功能
在项目里面要用到刷新库.曾经都是使用第三方的.只是看到官方出了 SwipeRefreshLayout之后就用SwipeRefreshLayout.可是不知道什么原因官方SwipeRefreshL ...
- jsp学习笔记总结
Cookie中对保存对象的大小是有限制的 解决cookie中无法保存中文的问题: request.setCharacterEncoding URLEncoder.encode()编码 URLDecod ...
- Django-权限信息中间件操作
# 在当前app下新建一个middleware的文件夹,然后就可以尽情的写中间件了,只能是这个名字,切记~@!import re from django.shortcuts import redire ...