BZOJ 1355[Baltic2009]Radio Transmission(KMP)
2024-09-08 00:51:12
题意
给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.
(n<=1000000)
题解
这种求最小循环节的题一般是KMP。
因为有一个很强的结论if(len%(len-nxt[len])==0)那这个字符串的最小环节为len-nxt[len]。
又因为题目说明给出的是有循环节的,所以直接输出len-nxt[len]就行了。
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=;
int n,nxt[N];
char s[N];
int main(){
scanf("%d",&n);
scanf("%s",s+);
nxt[]=;
for(int i=,j=;i<=n;i++){
while(j&&s[j+]!=s[i])j=nxt[j];
if(s[j+]==s[i])j++;
nxt[i]=j;
}
printf("%d",n-nxt[n]);
return ;
}
最新文章
- 关于几个主流语音SDK的接入问题
- SQL Server 进制转换函数
- linux 排序命令sort
- Socket通信(二)
- Codeforces Round #313 (Div. 2) A. Currency System in Geraldion
- android linux
- 08day1
- 16进制字符串转数字(C/C++,VB/VB.net,C#)
- 【JSF框架】 是一种标准
- NSUserDefaults偶尔/有时候保存数据会失败/失效
- Android 使用 RemoteViews 发送自定义通知 ,遇到 Couldn&#39;t expand RemoteViews问题总结
- Hacker(24)----防范密码被轻易破解
- javaScript表单焦点自动切换
- js正则表达式验证字符长度
- 可视化之Berkeley Earth
- 2015&;nbsp;Objective-C&;nbsp;三大新特性
- 使用Spring表达式语言进行装备--SpEL
- Kettle解决方案: 第三章 安装和配置
- 开通博客的第一天上传我的C#基础笔记。
- 怎么加密接口防止,API外部调用?