BZOJ——T 1355: [Baltic2009]Radio Transmission
http://www.lydsy.com/JudgeOnline/problem.php?id=1355
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 964 Solved: 664
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
cabcabca
Sample Output
HINT
对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读入的cabcabca,是它的子串
Source
求出A串在KMP算法中A的next数组 设A的长度为N 则答案为A的前N-next[N]位
为什么? 分两种情况讨论: next[N] > N/2 next[N] <= N/2

画个图比划比划~~
#include <algorithm>
#include <cstdio> using namespace std; const int N(+);
int n,next[N];
char s[N]; inline void Get_next()
{
int j=;
for(int i=;i<=n;i++)
{
for(;j>&&s[i]!=s[j+];) j=next[j];
if(s[i]==s[j+]) j++;
next[i]=j;
}
} int main()
{
scanf("%d%s",&n,s+);
Get_next();
printf("%d",n-next[n]);
return ;
}
枚举循环节长度L 用哈希判断A[1…L],A[L+1…2L],A[2L+1…3L]……是否相等 最后一个循环节长度可能不足L,特殊判断
但我T了、、、
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; #define ull unsigned long long
#define p 233
const int N(+);
ull n,hash[N];
char s[N]; inline void Get_hash()
{
for(int i=;i<=strlen(s+);i++)
hash[i]=hash[i-]*p+s[i]-'a';
}
inline ull Check(ull x,ull y,ull P)
{
return hash[y]-hash[x-]*P;
} int main()
{
scanf("%d%s",&n,s+);
Get_hash();
ull P=p;
for(int L=;L<=n;L++,P*=p)
{
bool flag=;
for(int i=L+;i<=n/L*L;i+=L)
if(Check(i,i+L-,P)!=hash[L])
{
flag=;
break;
}
if(!flag) continue;
for(int i=n/L*L+;i<=n;i++)
if(s[i]!=s[i-n/L*L])
{
flag=;
break;
}
if(!flag) continue;
printf("%d",L);
break;
}
return ;
}
BZOJ——T 1355: [Baltic2009]Radio Transmission的更多相关文章
- 【BZOJ】1355 [Baltic2009]Radio Transmission
[算法]KMP [题解]KMP中n-next[n]得到最小循环节的性质. 考虑一个循环串(最后一个循环节可能残缺),它最长的[后缀=前缀]一定是以第二个循环节为起始位置的后缀. 正着考虑的话假设后缀T ...
- BZOJ 1355: [Baltic2009]Radio Transmission( kmp )
自己YY一下可以发现answer = n - fail[ n ] ------------------------------------------------------------------ ...
- BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 792 Solved: 535 ...
- 1355: [Baltic2009]Radio Transmission[循环节]
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 796 Solved: 538 ...
- BZOJ 1355: [Baltic2009]Radio Transmission
Description 一个字符串最短周期. Sol KMP. 最短周期就是 \(n-next[n]\) 证明: 当该字符串不存在周期的时候 \(next[n]=0\) 成立. 当存在周期的时候 \( ...
- BZOJ 1355 Baltic2009 Radio Transmission KMP算法
标题效果:给定一个字符串,求最小周期节(不能整除) 示例Hint这是错误的忽略了就好了 环路部分应该是cab 这个称号充分利用KMP在next自然阵列,那是,n-next[n]它表示一个循环节 POJ ...
- bzoj 1355: [Baltic2009]Radio Transmission【kmp】
kmp复健,答案是n-next[n] #include<iostream> #include<cstdio> using namespace std; const int N= ...
- BZOJ 1355: [Baltic2009]Radio Transmission AC自动机/KMP
被一个KMP傻题搞蒙圈了,此题AC自动机空间超限,只能用KMP写(我只会AC自动机QAQ)...... AC自动机 Code: // luogu-judger-enable-o2 #include & ...
- BZOJ 1355[Baltic2009]Radio Transmission(KMP)
题意 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. (n<=1000000) 题解 这种求最小循环节的题一般是KMP. 因为有 ...
随机推荐
- NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇
个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...
- HYSBZ1061题解
- BNUOJ 4049 四叉树
四叉树 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Ma ...
- Raphaeljs入门到精通(一)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- vim使用(二):经常使用功能
1. vim经常使用功能 vim的经常使用功能.包含块的选择.复制,多文件的编辑.多窗体等功能. 2. vim块选择 块选择是将文档中的一块能够选择复制,粘贴,不用整行的处理. 按下 v , V . ...
- HDU 1730 Northcott Game
简单的尼姆博弈.想到了非常easy! 就拿一行举例.怎么赢.? 就是死劲挨着对方移,当然假设本身就是挨着的,又轮到你移动了,那么对于这一行来讲.你就是输的!! 由此可见每一行的棋子起始距离就显得尤为重 ...
- vue13过滤器 debounce延迟、limitBy、filterBy、orderBy
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDU 2435 There is a war Dinic 最小割
题意是有n座城市,n号城市不想让1号城市可达n号,每条道路有一条毁坏的代价,1号还可以修一条不能毁坏的道路,求n号城市所需的最小代价最大是多少. 毁坏的最小代价就直接求一遍最大流,就是最小割了.而可以 ...
- MVC页面常用方法
转自:https://www.cnblogs.com/baisoft/p/5839319.html @RenderBody 在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Lay ...
- display,visibility,meta知识
<div style="display:">显示</div><div style="display:none;">隐藏不占位 ...