51nod 1277 字符串中的最大值(KMP)

退火朗之万动力学采样 退火朗之万动力学采样(Simulated Annealing Langevin Dynamics Sampling)结合了退火技术和朗之万动力学,是一种用于分子模拟和统计物理中的计算方法。这种方法可以帮助系统从局部最小值中逃逸,以找到全局最小值或进行有效的配置空间探索。 阅读详情

题目来源:  Codility
基准时间限制:1 秒 空间限制:131072 KB 分值: 80  难度:5级算法题
 收藏
 关注
一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: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,是所有前缀中最大的。
Input
输入字符串S, (1 <= L <= 100000, L为字符串的长度),S中的所有字符均为小写英文字母。
Output
输出所有前缀中字符长度与出现次数的乘积的最大值。
Input示例
abababa
Output示例
10

以前用KMP一直没有关注Next数组的用法,这道题很好的体现了Next数组的用法。也让我明白了Next数组所代表的值不仅仅是失配时应该转移的下标位置,同时也是最大前缀-后缀的个数。

思路:先创一个Next数组,num[i]数组表示的是长度为i的前缀的个数。从最后一个开始向前搜索,只要大的范围出现一次,那么小的前缀匹配的个数就会多一次。根据这个原理,就可以找到所有num[i]。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N=100005;
char t[MAX_N],p[MAX_N];
int ne[MAX_N],num[MAX_N];
void makeNext(const char p[],int ne[])
{
    int len=strlen(p);
    ne[0]=0;
    for(int i=1,k=0;i<len;i++)
    {
        while(k>0&&p[i]!=p[k]) k=ne[k-1];
        if(p[i]==p[k]) k++;
        ne[i]=k;
    }
}
int kmp(const char t[],const char p[],int ne[])
{
    int n=strlen(t),m=strlen(p),ans=0;
    makeNext(p,ne);
    for(int i=0,k=0;i<n;i++)
    {
        while(k>0&&t[i]!=p[k]) k=ne[k-1];
        if(t[i]==p[k]) k++;
        if(k==m)
        {
            ans++;
            k=0;
        }
    }
    return ans;
}
int main()
{
    while(~scanf("%s",p))
    {
        int len=strlen(p);
        memset(num,0,sizeof(num));
        makeNext(p,ne);
        for(int i=len;i>0;i--)
        {
            num[i]++;
            num[ne[i-1]]+=num[i];
        }
        long long ans=0;
        for(int i=1;i<=len;i++)
        {
            if((long long)num[i]*i>ans)
                ans=(long long)num[i]*i;
        }
        printf("%lld\n",ans);
    }
    return 0;
}


基于Simulink的PR(比例谐振)控制器在单相整流中的应用 本文详细介绍了基于Simulink的单相整流系统中PR(比例谐振)控制器的设计与实现方法。首先阐述了PR控制器相较于传统PI控制器的优势,能够有效消除交流信号跟踪中的稳态误差。接着系统讲解了PR控制器的传递函数原理、实用型设计(带带宽)及参数整定方法。通过Simulink建模步骤,包括主功率电路搭建、电压外环PI设计、电流指令生成、PR控制器实现(推荐MATLAB Function方法)和SPWM调制等关键环节。仿真对比显示PR控制在电流跟踪精度(THD仅1.9%)、功率因数(0.998)和动态响应(突变恢 阅读详情

相关推荐

Unity 2021 LTS安装避坑指南:从下载到第一个3D项目的完整流程

本文提供了一份详尽的Unity 2021 LTS安装与首个3D项目创建指南。内容涵盖从Unity Hub下载、版本选择、模块安装避坑,到编辑器界面解析、创建旋转立方体脚本的完整流程,旨在帮助初学者快速搭建稳定开发环境并上手核心操作。

mango的博客 310

51nod1277 字符串中的最大值【KMP】

一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下: “a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的乘积 3 * 3 = 9, ...

weixin_43438700的博客 378

Windows下Anaconda换清华镜像源最全指南(含常见问题解决)

本文提供了一份详尽的Windows系统下Anaconda配置清华镜像源的完整指南。针对网络下载缓慢的痛点,文章详细对比了命令行添加与直接编辑配置文件两种主流方法,并重点解决了配置过程中常见的文件缺失、安装失败、环境求解缓慢等疑难问题,帮助用户一劳永逸地提升包管理效率。

brandy的博客 337

KMP——51nod1277 字符串中的最大值

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277 标算Kmp啦 题目中让我们求的前缀出现次数是可以用Kmp中的nex数组推出来的 就是当前i的border长度可以累加到nex[i]的次数答案中 所以我们先求出字符串的nex数组(border),然后倒推答案(sum[nex[i]]+=sum[i]) 最后输

2333:jzqjzq的博客专栏 552

利用wolcmd.exe批处理执行远程唤醒

代码如下: @echo off cls :check if exist wolcmd.exe goto targetmac echo 缺少wolcmd.exe echo. goto end :targetmac cls echo -------------------------------------------------------- echo 目标主机PC-01地址:40235678A...

Chriseo的博客 6949

TPC好像是这么回事儿

TPC(Transmit Power Control)发送功率控制,本觉得就是控制一下发送功率,原理很简单,但看原版协议死活每搞懂什么意思,恼羞成怒!!!! 后来又看了一些贴子和cisco的相关功能介绍,再回头看协议,好像是这么一回事: 1、所谓TPC,是AP控制STA的发送功率的一种手段。在802.11d中,已定义了使用Country Element传递区域无线通信规定的信道和最大发送功率信息: 通过获取这些信息,STA可以确定自己应该遵守什么规则,可以用什么发送功率在哪些信道上通信。 2

两只勤劳的蜜蜂 8630

51nod-1277 字符串中的最大值(KMP)

原题链接 1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与

L. 714

redhawk:使用rh_setup.pl产生gsr模板

必须加的option工具会在rh_setup.pl给出提示,按照要求填写即可,另外工具会把所有填写的输入文件和信息放到rh_setup.init文件中,拷贝这个文件可在任何平级运行目录下,直接rh_setup.pl产生gsr以及run sta/dyn/em的脚本。rhsetup.pl -top top_cell_name -vdd_nets VDD 1.2 VDD2 1.2 -vss_nets VSS -frequency 100e6 (100m是默认值)更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 1055

51Nod-1277-字符串中的最大值

ACM模版描述题解用 kmp 处理一下获取一个 next 数组即可,然后递推一遍,O(n),简单快捷,完美!代码#include <iostream> #include <cstring>using namespace std;const int MAXN = 1e5 + 10;char str[MAXN]; int len; int nt[MAXN]; int res[MAXN];void get

逐梦者 1720

QMK键盘固件开发零基础教程(2025全新重制版)

《QMK键盘固件开发零基础教程(2025全新重制版)》是一套专为键盘爱好者和开发者设计的全面教程,旨在帮助用户从零基础快速掌握最新的QMK固件开发技术。教程基于2025年最新的QMK版本(0.19.8+),解决了旧版教程中的诸多问题,如概念不清、步骤缺失和代码过时等。新版教程提供了详细的图解、完整的项目源码以及从环境配置到高级功能开发的全流程指导。此外,教程还涵盖了2024年QMK生态的重大变革,包括键码系统的重构、编译工具链的更新以及Config文件格式的改变等。付费版教程额外提供独家内容,如新特性解析、

Despacito0o的博客 1121

STM32入门教程:无人机控制

我们将会一步一步引导您完成无人机的控制代码,包括无人机的姿态控制、飞行控制和通信控制等。第三步:配置无人机姿态控制 无人机的姿态控制是指控制无人机在空中的倾斜和转向。为了实现姿态控制,我们需要使用加速度计和陀螺仪传感器来获取无人机的姿态信息,并使用PID控制算法来控制无人机的姿态。在这一步骤中,您需要根据您使用的具体传感器和控制算法的要求进行更详细的配置和编码。在通信控制中,您需要考虑到通信的稳定性和可靠性。第五步:通信控制 无人机的通信控制是指与地面站或其他设备进行通信,传输飞行数据和接收飞行指令。

m0_75244442的博客 747

【51Nod1277】字符串中的最大值

Description一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下:“a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的

Facico的博客 1308

历年安徽省省赛AHOI初中组考点分类汇总考点分类汇总

持续更新中.....

weixin_42358969的博客 818

【Kmp求字符串前缀在字符串出现的次数】51nod 1277 字符串中的最大值

#include #include #include using namespace std; typedef long long LL; /* 51nod 1277 字符串中的最大值 求前缀在字符串出现的次数 (num[i]) num[nex[i]] += num[i]; */ const int N = 100010; char s[N]; int nex[N]; void getn

学无纸巾 629

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

51nod1277字符串中的最大值题解(KMP算法)

题目:51nod1277. 题目大意:给定一个串,求出它前缀的最大值,其中一个前缀的值定义为这个前缀在字符串中出现的次数乘以这个前缀的长度. 很明显一道字符串前缀相关的题,而且还是单串匹配,所以就是KMP了. 考虑先求出nextnextnext数组,我们考虑一个前缀出现次数如何通过next数组计算. 这道题其实是要知道每个前缀的出现次数就可以了,所以我们记录一个sumsumsum数组,其中sum[...

hzk_cpp的博客 257

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

51NOD 1277 字符串中的最大值 【拓展KMP】

1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。

LuRiCheng的博客 526

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

(kmp)51nod 1277 字符串中的最大值

i从后往前,前缀长度为next[i]的字符串说明在此时出现过一次,累加上   #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;cstring&gt; #include &lt;cstdio&gt; #include &lt;queue&gt; #include &lt;stack&gt; #include &...

qq_41758381的博客 228

51nod 1277 字符串中的最大值 kmp法

复健中… 题目重点在求出现的次数,这个可以用SA,SAM求,讨论区有SA的解法。相对而言kmp较为简便,只要理解kmp中next数组的定义,就能轻松解决,倒着操作累计叠加即可。 需要注意的是边界问题,由于未被赋值的next数组默认为0,所以如果计数的数组从0开始就会累加过多,所以将1作为初始位置,也因此做kmp的时候记得往后多做一位。 不过就算位置错了也只有三个点不过。。 #include<cstdio> #include<cstring> #include<algorithm

老臣 336

51nod 1277 字符串中的最大值【KMP算法】【next树】

Description一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下:“a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的

Sdywolf的博客 582

【51nod 1277】:字符串中的最大值 KMP

传送门 分析 考虑KMPKMPKMP算法中¥next数组的意义,如果数组的意义,如果数组的意义,如果next[i] = 0$,表示1−i1 - i1−i这一段字符串是唯一的前缀 所以,我们用sum[i]sum[i]sum[i]表示长度为iii的前缀出现的次数,那么可以写出递推式sum[ne[i]+=sum[i]sum[ne[i] += sum[i]sum[ne[i]+=sum[i] 代码 #pragma GCC optimize(3) #include <bits/stdc++.h> #defi

tlyzxc的博客 271

51Nod 1277 字符串中的最大值(KMP + DP)

题意:给你一个字符串,然后让你找该字符串 的前缀出现次数 * 长度的最大值。 思路:KMP + dp。 先KMP求出next数组。设dp[i] 代表 i长度的 前缀出现的次数。 那么 对应着 i 有 dp[ next[i] ] += dp[i] 因为 Next数组的含义 是非前缀的后缀子串 与该字符串前缀 匹配的 最大长度,即对应着Next[i],如果Next[i] 不等于0 的话,...

一身清贫怎敢入繁华 450

【51Nod】1277 字符串中的最大值-KMP

题意 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 题解 kmp的nxt建成一棵树,子树大小就是出现次数QWQ 太妙啦 ac自动机MLE了… 代码 #include&amp;lt;bits/stdc++.h&amp;gt; using namespa...

远行客 293

51nod1277 字符串中的最大值(KMP)

1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = "ababab

Rain 567

kmp-51nod 1277 字符串中的最大值

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277 首先求前缀,那么你要想到kmp; 我们算出next数组(即p[])后,可以理解为包含关系; 即前缀i包含前缀p[i]; 我们搞一个sum[i]表示前缀长度为i的前缀出现过几次; 显然初始值sum[i]=1; 我们倒着推,边推边算答案,就好了; 注意su

我怎么这么菜的呢 541

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

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

87

51nod 1277 字符串中的最大值(kmp)

Description一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下:“a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的

so_so_y的博客 353
上一篇: hdu 4803 Poor Warehouse Keeper(贪心)
下一篇: poj 3468 A Simple Problem with Integers(线段树区间更新)
Timeclimber
博客等级 码龄9年 25粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值