poj1961
2024-08-28 08:58:38
poj1961
主要是考察对next数组的理解,
abaabaabaaba
abaabaaba
abaabaaba
错开的部分便是循环节
7月29日更
如果n%(n-kmp[k])==0,那么n-kmp[k]便是循环节的长度,我来解释一下为什么
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<set>
#include<map>
#include<stack>
#include<cstring>
#define inf 2147483647
#define ls rt<<1
#define rs rt<<1|1
#define lson ls,nl,mid,l,r
#define rson rs,mid+1,nr,l,r
#define N 1000010
#define For(i,a,b) for(int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar() using namespace std;
int kmp[N];
int n,k;
char a[N];
int cnt;
void in(int &x){
int y=;
char c=g();x=;
while(c<''||c>''){
if(c=='-')y=-;
c=g();
}
while(c<=''&&c>=''){
x=(x<<)+(x<<)+c-'';c=g();
}
x*=y;
}
void o(int x){
if(x<){
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
} void clear(){
memset(kmp,,sizeof(kmp));
k=;
} int main(){
while(cin>>n&&n){
clear();
cin>>(a+);
For(i,,n){
while(k&&a[i]!=a[k+])
k=kmp[k];
if(a[k+]==a[i])
k++;
kmp[i]=k;
}
cout<<"Test case #"<<++cnt<<endl;
For(i,,n)
if(kmp[i]>&&i%(i-kmp[i])==){
o(i);p(' ');o(i/(i-kmp[i]));p('\n');
}
p('\n');
}
return ;
}
最新文章
- hibernate 中根据id删除一条记录的语句
- BOOST_AUTO宏
- Websocket Component
- 如何在yii的controller中调用外部action
- [URAL]刷题记录表
- jmeter之json数据参数化 断言等
- Javascript 原型注意事项
- C语言--流程控制
- Android开发(27)--TextView单击链接弹出Activity
- IOS开发中绘制地图线路
- 记录下actionbar的翻译
- Javascript面对对象. 第二篇
- jump堡垒机配置使用
- The content of elements must consist of well-formed character data or markup
- Linux记录-安装LAMP和R环境
- RV32A指令集
- MVC备忘笔记
- Python3.6 AES加密 pycrypto 更新为 pycryptodemo | TypeError: Object type <;class &#39;str&#39;>; cannot be passed to C code
- vim删除文件第n行到结尾、或某段内容
- 20145105 《Java程序设计》第3周学习总结