Period
程序员文章站
2022-05-02 12:55:26
...
Period
题意
若字符串
s
s
s的前缀s[1~i],2 <=i <= n,是由长度为len的最小循环元循环k次而成,则输出这个前缀字符串的长度以及循环次数k。
思路
字符串
s
s
s的前缀s[1~i],2 <=i <= n,具有长度为len的最小循环元,则len能整除i,并且s[len+1 ~ i] = s[1 ~ i - len],既next[i] = i - len,所以最小循环元的长度len = i - next[i],循环次数为i / len。
code
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e6+5;
int t, n, net[N];
char a[N];
void calc_next()
{
net[1] = 0;
for(int i = 2, j = 0; i <= n; i++)
{
while(j && a[i] != a[j+1])
j = net[j];
if(a[i] == a[j+1])
j++;
net[i] = j;
}
}
int main()
{
while(cin >> n && n)
{
cin >> (a+1);
calc_next();
printf("Test case #%d\n", ++t);
for(int i = 2; i <= n; i++)
{
if(i % (i-net[i]) == 0 && i / (i-net[i]) > 1)
printf("%d %d\n", i, i / (i-net[i]));
}
puts("");
}
return 0;
}
推荐阅读
-
Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
-
SqlException:ConnectionTimeout Expired. The timeout period elapsed during the post-login phase
-
浅谈JDK8中的Duration Period和ChronoUnit
-
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool
-
Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
-
【python数据分析(18)】Pandas中时间序列处理(4)pd.to_period()与pd.to_timestamp()数据之间转换以及时间序列索引及切片
-
SqlException:ConnectionTimeout Expired. The timeout period elapsed during the post-login phase
-
HDU - 1358 Period(KMP的next数组)
-
Period
-
Period