博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1355——2016——3——15
阅读量:4692 次
发布时间:2019-06-09

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

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1355

题目大意:

1355: [Baltic2009]Radio Transmission

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 591  Solved: 390
[][][]

Description

给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.

Input

第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成.

Output

输出最短的长度

Sample Input

8
cabcabca

Sample Output

3

HINT

对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读入的cabcabca,是它的子串

Source

题解:这题就是KMP next数组的应用啦(水),最小值就是n-next[n](很容易想吧,因为可行解集为{n-next[n],n-next[next[n]]....)所以最小解显然为n-next[n];

1 #include
2 #include
3 #include
4 #define inf 0x7fffffff 5 int n,ans; 6 int next[1000100]; 7 char s[1000100]; 8 using namespace std; 9 int main()10 {11 scanf("%d",&n);12 scanf("%s",s+1);13 ans=0;14 int fix=0;15 for (int i=2; i<=n; i++)16 {17 while (fix && s[fix+1]!=s[i]) fix=next[fix];18 if (s[fix+1]==s[i]) fix++;19 next[i]=fix;20 }21 printf("%d\n",n-next[n]);22 }
View Code

 

转载于:https://www.cnblogs.com/HQHQ/p/5280425.html

你可能感兴趣的文章
C#后台正则表达式截取字符
查看>>
PHP中::、->、self、parent::、$this操作符的区别
查看>>
Django中的信号及其用法
查看>>
Java 并发编程:volatile的使用及其原理
查看>>
[NOI2017]泳池
查看>>
HDU 1796 (容斥原理)
查看>>
merge-two-sorted-lists (归并排序中的合并)
查看>>
Android_清除/更新Bundle中的数据(不finish() Activity的情况下)
查看>>
ASP.NET对HTML元素进行权限控制(一)
查看>>
卷积神经网络Lenet-5实现-深入浅出
查看>>
Flex AdvancedDatagrid使用
查看>>
第一个pip安装包程序制作实验
查看>>
菏泽黑社会老大
查看>>
使用maven多模块来构建系统时,spring初始化报错的问题
查看>>
oracle内存粒度
查看>>
面向对象三大特性-继承
查看>>
C# 程序运行进度显示Lable
查看>>
495. 提莫攻击 Teemo Attacking
查看>>
374. 猜数字 Guess Number Higher or Lower
查看>>
微信公众平台开发教程第5篇-----网页授权获取用户基本信息
查看>>