Period||POJ1961

link:http://poj.org/problem?id=1961
Description

For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the largest K > 1 (if there is one) such that the prefix of S with length i can be written as AK ,that is A concatenated K times, for some string A. Of course, we also want to know the period K.

Input

The input consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S.The second line contains the string S. The input file ends with a line, having the
number zero on it.

Output

For each test case, output "Test case #" and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the prefix sizes must be in increasing order. Print a blank line after each test case.

Sample Input

3
aaa
12
aabaabaabaab
0

Sample Output

Test case #1
2 2
3 3

Test case #2
2 2
6 2
9 3
12 4

题解:这个和poj2406基本相似
可以看看这个http://blog.youkuaiyun.com/csdn_muxin/article/details/77231807
kmp简单运用

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
char s[1000100];
int next[1000100];
void kmp()
{
    int n=strlen(s);
    int i,j;
    i=0,j=-1;
    next[0]=-1;
    while(s[i])
    {
        if(j==-1||s[i]==s[j])
        {
            i++,j++;
            next[i]=j;
        }
        else
            j=next[j];
    }
}
int main()
{
    int n,i,j,c=1;
    while(scanf("%d",&n),n!=0)
    {
        scanf("%s",s);
        kmp();
        printf("Test case #%d\n",c++);
        for(i=1;i<=n;i++)
        {
            if(i%(i-next[i])==0&&i/(i-next[i])>1)
            {
                printf("%d %d\n",i,i/(i-next[i]));
            }
        }
        printf("\n");
    }
return 0;
}
内容概要:本文详细分析了全球及中国财富管理市场的发展现状与未来趋势。全球财富管理市场起源于欧洲、发展于美国,美国财富管理市场经过百年发展,形成了以商业银行、综合财富管理平台和投资服务平台为代表的三类财富管理体系。中国财富管理市场正处于快速发展期,居民财富快速增长并向金融资产倾斜,资管新规引导市场健康发展。文中还探讨了中国财富管理市场的竞争格局,包括私人银行、银行理财、公募基金、券商资管、信托、第三方财富管理机构和互联网财富管理平台的发展情况。此外,公募基金投顾试点成为财富管理市场转型的重要探索,买方投顾模式逐步取代卖方投顾模式,AI赋能投顾业务,为行业发展带来新机遇。 适合人群:对财富管理行业感兴趣的投资者、金融从业者及研究机构。 使用场景及目标:①了解全球及中国财富管理市场的发展历程与现状;②掌握中国财富管理市场竞争格局及各机构的发展特点;③探索公募基金投顾试点对财富管理市场的转型意义及AI赋能投顾业务的应用前景。 阅读建议:本文内容详实,涵盖了财富管理市场的多个方面,建议读者重点关注中国财富管理市场的现状与发展趋势,特别是私人银行、银行理财、公募基金、券商资管等机构的具体发展情况,以及公募基金投顾试点和AI赋能投顾业务的创新模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值