第7点 TLE了,求调
题目:
最小循环节
题目ID:8624必做题100分
最新提交:
Time Limit Exceeded
90 分
历史最高:
Time Limit Exceeded
90 分
时间限制: 1000ms
空间限制: 524288kB
题目描述
题目描述:
一个字符串 s 的循环节为 t,当且仅当 s 是由若干个 t 连接而成。例如 ab 就是 abababab 的循环节,同时 abab 也是 abababab 的循环节,但它们都不是 ababa 的循环节。
现给定 s,求 s 的长度最小的循环节。
输入格式:
第一行输入一个正整数 n。
第二行输入一个长度为 n 的字符串 s。
保证 s 仅有小写字母构成。
输出格式:
一行一个正整数,表示循环节长度的最小值。
样例输入:
10
ababcababc
样例输出:
5
数据规模:
1≤n≤106。
代码:
#include<bits/stdc++.h>
using namespace std;
int n[1000010],a,x,i;
string b;
int main(){
scanf("%d",&a);
cin>>b;
for(i=1;i<a;i++){
if(b[x]==b[i]){
x++;
}
else{
while(x and b[x]!=b[i]){
x=n[x];
}
}
n[i]=x;
}
printf("%d",(a%(a-n[a-1])?a:a-n[a-1]));
return 0;
}