HDU 3746 Cyclic Nacklace kmp求字符串的循环节长度

KMP算法求字符串的最小循环节 题目链接(题目链接) 说到求字符串的最小循环节就不得不提及KMP算法 因为要求循环节,还需要用到KMP算法的next数组 KMP算法本来是用来求一个串中是否包含另一个串,或者说一个串是否为另一个串的子串 下面有一个视频,很清晰的介绍了KMP算法 KMP算法详解,看不懂算我输 如果KMP算法理解其原理了,那么这道题也是非常简单的 用了KMP中的NEX 阅读详情

Cyclic Nacklace ,题目链接, click here。

Cyclic Nacklace
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6023 Accepted Submission(s): 2690

Problem Description

CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, without any surprise, there are only 99.9 yuan left. he is too distressed and thinking about how to tide over the last days. Being inspired by the entrepreneurial spirit of “HDU CakeMan”, he wants to sell some little things to make money. Of course, this is not an easy task.

As Christmas is around the corner, Boys are busy in choosing christmas presents to send to their girlfriends. It is believed that chain bracelet is a good choice. However, Things are not always so simple, as is known to everyone, girl’s fond of the colorful decoration to make bracelet appears vivid and lively, meanwhile they want to display their mature side as college students. after CC understands the girls demands, he intends to sell the chain bracelet called CharmBracelet. The CharmBracelet is made up with colorful pearls to show girls’ lively, and the most important thing is that it must be connected by a cyclic chain which means the color of pearls are cyclic connected from the left to right. And the cyclic count must be more than one. If you connect the leftmost pearl and the rightmost pearl of such chain, you can make a CharmBracelet. Just like the pictrue below, this CharmBracelet’s cycle is 9 and its cyclic count is 2:

Now CC has brought in some ordinary bracelet chains, he wants to buy minimum number of pearls to make CharmBracelets so that he can save more money. but when remaking the bracelet, he can only add color pearls to the left end and right end of the chain, that is to say, adding to the middle is forbidden.
CC is satisfied with his ideas and ask you for help.

Input

The first line of the input is a single integer T ( 0 < T <= 100 ) which means the number of test cases.
Each test case contains only one line describe the original ordinary chain to be remade. Each character in the string stands for one pearl and there are 26 kinds of pearls being described by ‘a’ ~’z’ characters. The length of the string Len: ( 3 <= Len <= 100000 ).

Output

For each case, you are required to output the minimum count of pearls added to make a CharmBracelet.

Sample Input

3
aaa
abca
abcde

Sample Output

0
2
5

Author

possessor WC

Source

HDU 3rd “Vegetable-Birds Cup” Programming Open Contest

Recommend

lcy | We have carefully selected several similar problems for you: 3336 1358 1711 2222 3068

    题目意思:求一个字符串的循环节的长度。
    思路:求一个next数组。next[len]代表的是最大匹配数目,那么len-next[len]就是最大匹配数目前的那段,即 循环节;
    如果len%(len-next[len])==0,那么代表这个字符串有len/(len-next[len])个周期;
    如果len%(len-next[len])!=0,循环节长度-(len%循环节长度)就是该字符串的循环节;
    否则,该字符串就是单独的一个字符,循环节的长度就是0。

之前我用过的是一next为next数组的名字,但是一直CE,然后就用了nexts,就过了。好坑… …

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int nexts[maxn],len;
char str[maxn];
void getn()//得到next数组;
{
    int k = -1,i=0;
    nexts[0]=  -1;
    while(i<len)
    {
        if(str[k]==str[i]||k==-1)
        {
            i++;
            k++;
            nexts[i]=str[i]!=str[k]?k:nexts[k];//代码优化下;
        }
        else
            k=nexts[k];
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",str);
        len=strlen(str);
        getn();
        int minn=len-nexts[len];//该字符串的循环节长度;
        if(!nexts[len])//如果next[len]==0,证明循环节为0;
            printf("%d\n",len);
        else if(len%minn)// 如果周期不是一个整数;
            printf("%d\n",minn-len%minn);
        else
            printf("0\n");
    }
    return 0;
}
OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解 本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。 阅读详情

相关推荐

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

求循环节的长度

import java.util.Vector;public class Main { static String s = ".";  //保存循环部分 public static void main(String[] args) { System.out.println(f(11, 13)); System.out.println(s); } // 用每次的余数来除m,当余数等于vector...

qq_37523868的博客 1697

Pixhawk变砖自救指南:从DFU模式到固件重刷全流程(附2.4.8实测)

本文详细介绍了Pixhawk飞控变砖后的自救方法,从DFU模式进入、固件重刷到高级恢复技巧全流程。特别针对国产版本boot0引脚未引出的特殊情况提供了解决方案,帮助用户通过QGC或Mission Planner地面站工具恢复飞控功能,适用于2.4.8等常见固件版本。

weixin_29168813的博客 337

HDU1358 Period(KMP中求字符串的前缀是否为周期串,若是,求循环节长度和循环次数)

Problem Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. T...

wcxyky的博客 234

解决Linux下Questasim中代码字体非常小

Questasim的source窗口里代码字体非常小 你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。 下面我给出我摸索好久的解决办法,分享给大家。 1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下: 不多逼逼,直接上图开搞: 给textFontV2设置值:monospace 12 normal roman 这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。 ...

SummerXRT的博客 7810

vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复

本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。

pz890123的博客 1293

kmp*1求一个字符串的循环节字串的长度(luoguP4391)

输入输出样例 输入样例#1: 8 cabcabca 输出样例#1:  3 #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #define maxn 1000001 using namespace std; int nex[maxn]; int len; void getnex(ch...

xqx1343002589的博客 553

Nordic nRF52832实战:手把手教你搭建智能手环BLE通信框架(附完整代码)

本文详细介绍了如何使用Nordic nRF52832芯片搭建智能手环的BLE通信框架,涵盖芯片优势、协议栈初始化、低功耗广播策略及健康数据服务实现。通过完整代码示例和架构设计,帮助开发者快速掌握蓝牙低功耗通信技术,适用于可穿戴设备开发。

weixin_29192141的博客 246

HDU - 3746 Cyclic Nacklace 【KMP模板 求字符串循环节个数【最大/最小循环节的个数

求最循环节的个数: #include "iostream" #include "algorithm" #include "cstring" #include "cstdio" #include "iomanip" using namespace std; string a; int nextt[100005]; void getnext(){ int i=0,j=-1; n...

cheung99857的博客 3813

VerilogEval实战指南:从基准测试到模型微调的全流程解析

本文提供了VerilogEval实战指南,详细解析了从基准测试到模型微调的全流程。VerilogEval是一个自动化、标准化的测试框架,用于客观评估大语言模型生成Verilog硬件代码的能力。文章涵盖了环境搭建、核心机制解析、利用其生成合成数据进行模型微调的策略,以及如何将其工程化集成到自动化评估流程中,为硬件设计领域的AI应用提供了完整的方法论。

yy01234的博客 1005

用ESP32和HomeSpan自制HomeKit智能灯,手把手教你从零接入苹果家庭App

本文详细介绍了如何使用ESP32开发板和HomeSpan开源库自制原生HomeKit智能灯,从硬件搭建到软件配置,再到通过苹果家庭App控制的全过程。项目绕过了苹果MFi认证,成本低廉但功能完整,支持Siri语音控制、自动化场景等高级功能,是智能家居DIY的实用指南。

weixin_28717431的博客 321

HDU 3746 Cyclic Nacklace KMP求字符串最小循环节长度

题意:一个字符串,必须要有的重复串组成(至少重复两次),现在问在串的最后面至少填多少字母才能满足要求。 思路:先求出循环节的长度。利用KMP的nex数组求出循环节长度。 举个栗子: abcdeabcdeab 长度L=12,nex[12]=7,x=L-nex[L]=5就是一个循环节的长度,用5-L%5就是答案了。 如果nex[L]=0,答案就是L。

Accepted 865

SpringBoot+Vue前后端分离项目实战:个人博客系统

MyBlog主要是基于 SpringBoot + Vue 前后端分离开发的一款动态个人博客系统,后台和前台均通过JSON数据做交互,主要功能有文章管理、分类管理、标签管理、附件管理、评论管理、友链管理、个人资料/博客信息管理等。

Myles'Blog 1万+

(KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)

题目:Cyclic NacklaceTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3387    Accepted Submission(s): 1549Problem DescriptionCC always becomes very

黄俊东的专栏 1855

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HDU3746 Cyclic Nacklace(KMP,补全最小循环节

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意:一串字符,只能在串首和串尾添加字符,最少添加几个字符前后字符串连接起来会是一个循环节组成的串 思路: 那么我们最少需要添加的就是循环节大小减去不足循环节的串大小(只需要考虑尾部 i % ( i - next[i] ) == 0 && next[i] != 0 则说明字符...

nuoyanli的博客 1590

计算机控制技术及应用

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

HDU 3746 Cyclic Nacklace (KMP补齐最小循环节)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 解题思路: 结论:最小循环节长度为len-fail[len] len表示字符串长度,字符串的下标0~len-1,fail[len]表示0~len-1的最长相同前后缀 ①对于2*fail[len]<=len的情况显然成立,且要补足的为len-fail[n] ②如果大于2*fail[...

shadiao.的博客 293

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU 3746 Cyclic Nacklace (最小循环节、循环周期)

HDU 3746 Cyclic Nacklace -012 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3746 Problem Description CC always becomes very depressed at the end of this month, he has checked his credit card yesterday...

GG_Bond的博客 270

HDU-3746 Cyclic Nacklace

题目大意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。例子: abcabc 已经循环2次,添加数为0 abcac 没有循环2次,添加字符abcac。数目为5. abcabcab 已经循环过2次,但第三次不完整,需要添加数为1 这题其实可以说是poj2185的子问题,其中求高度的部分跟本题同理,只是把每行看作了一个整体。本题可以非常巧妙的kmp解决。做一遍kmp之后我们可以得到

lkb 的小屋 507

HDU 3746 Cyclic Nacklace(KMP循环节问题)

题意: 给出一个串,可以在左端或右端加字符。问使这个串至少有两个循环节,至少要加多少个字符。其实在左和右加是一样的,这里我们讨论在右加。 关于KMP循环节问题: 首先可以确定一个事情,就是一个字符串,它可以分为两类。 1.不完整的循环串 2.完整的循环串 比如abcabcabc就是一个有三个循环节的完整的循环串,而abcabca就是有两个循环节的不完整的循环串,它要加上ab才能成为有三个循环节的完...

黑丝太白的博客 339

HDU - 3746 Cyclic Nacklace KMP next数组应用,求循环节并补全

HDU - 3746 Cyclic Nacklace 题意: 求最少添加多少个字符使字符串变成由 n (n&gt;=2) 个循环节组成的字符串。 思路: 这个题需要用到一些与 nxt 数组有关的公式 假设字符串长度为 len (代码中为 n ) 设最小循环节的长度为 m :m = len - nxt[len] 设所需补全的字符数为 x :x = m-len%m = m-(len-m)...

没有梦想何以远行 231

HDU 3746 Cyclic Nacklace(KMP:补齐循环节)

HDU 3746 Cyclic Nacklace(KMP:循环节) http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意:给你一个串,要你在串头或尾添加最少的字符,使得该串至少有2个循环节,问你最少需要加几个字符. 分析:        首先要明白:如果一个串需要至少添加x(x>=0)个字符才能是有2个循环节的串,那么我可以只在串末尾添加,不需

code 4232

【题解】Cyclic Nacklace HDU - 3746 ⭐⭐⭐ 【KMP 循环节问题】

Cyclic Nacklace HDU - 3746 第一题来啦。 现在给你一个字符串,请问在该字符串末尾最少添加多少个字符,可以让这个字符串获得重复循环序列。 Input 第一行是一个整数 T ( 0<T<=100 ) 代表测试数据的组数。 之后T行每行一个字符串,由小写字母组成,字符串的长度3<=L<=100000。 Output 每组数据输出一行结果。 Exampl...

Suprit's blog 835

KMP+hash hdu3746 Cyclic Nacklace

传送门:点击打开链接 题意:已知原串,在首或者尾加上一些字符后,变成至少有一个循环节循环2次变成新串 思路:我们能很容易的发现,在首添加字母和在尾添加字母效果是一样的,所以我们只考虑在末尾添加 首先我们都知道,KMP可以用来求前缀中的最长循环节长度。知道了这个有什么用呢? 我们枚举所有的前缀,然后取得循环节的长度w,与此时后面剩下的字符串的长度t去比较 如果后面剩下的字符串等于原字符串的

qwb的博客 1220

Cyclic Nacklace HDU - 3746 (前缀数组 kmp)

用前缀数组可以求得初始字符串的最小循环节。 最小循环节=(原字符串长度-末尾前缀数组值)

weixin_43925900的博客 217

Cyclic Nacklace(kmp算法求最小循环节)

HDU—3746 CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, without any surprise, there are only 99.9 yuan left. he is too distressed and thinking abo...

qq_44293044的博客 506

Cyclic Nacklace HDU - 3746(KMP中对next数组的理解)

CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, without any surprise, there are only 99.9 yuan left. he is too distressed and thinking about how to...

Ray.C.L的博客 635
上一篇: Light oj 1002 - Country Roads 迪杰斯特拉变形
下一篇: 湘潭大学中南邀请赛
落幕丶式
博客等级 码龄11年 2粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值