博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HDU3746]Cyclic Nacklace(KMP)
阅读量:7289 次
发布时间:2019-06-30

本文共 647 字,大约阅读时间需要 2 分钟。

Description

求最少需要在给定字符串后面补几个字符才能凑成至少两个循环

Solution

对KMP中p数组的灵活引用

首先,n-p[n]为为字符串的最小循环节,如果(n%(n-p[n]))==0那么不需要补字符

否则的话,应补的字符数最少应为(n-p[n])-n%(n-p[n])

Code

 

#include 
#include
#include
using namespace std;int n,T,p[100010];char s[100010];int main(){ scanf("%d",&T); while(T--){ memset(p,0,sizeof(p)); scanf("%s",s+1); n=strlen(s+1); for(int i=2,j=0;i<=n;++i){ while(j>0&&s[i]!=s[j+1]) j=p[j]; if(s[i]==s[j+1]) j++; p[i]=j; } int x=n-p[n]; if(x==n) printf("%d\n",n); else if(n%x==0) puts("0"); else printf("%d\n",x-n%x); } return 0;}

 

转载于:https://www.cnblogs.com/void-f/p/8893520.html

你可能感兴趣的文章
计算几何 模板
查看>>
“The Psychology of Cross Country”笔记
查看>>
10 Web Apps for Developers 为开发者提供的10款Web应用程序
查看>>
python之正则表达式
查看>>
Shell命令-文件及目录操作之touch、tree
查看>>
修改K/3 Cloud管理中心端口
查看>>
C#语言课程11月7日
查看>>
linux日常1-踢出用户
查看>>
MFC多文档应用程序同时显示两个视图
查看>>
github快速入门(一)
查看>>
PHP全栈开发(八):CSS Ⅸ dispaly & visibility
查看>>
正则表达式
查看>>
【Oracle 12c】最新CUUG OCP-071考试题库(56题)
查看>>
C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码...
查看>>
实验二
查看>>
简单安装ubuntu
查看>>
20160331javaweb 之JSP page 指令
查看>>
用Ruby批量获取电影的评分与影片信息
查看>>
2019.5.29 区块链论文翻译
查看>>
Centos6.6安装mysql记录
查看>>