zoukankan      html  css  js  c++  java
  • poj2406 Power Strings

    Power Strings
    Time Limit: 3000MS   Memory Limit: 65536K
    Total Submissions: 39658   Accepted: 16530

    Description

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).

    Input

    Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.

    Output

    For each s you should print the largest n such that s = a^n for some string a. 

    Sample Input

    abcd
    aaaa
    ababab
    .
    

    Sample Output

    1
    4
    3
    

    Hint

    This problem has huge input, use scanf instead of cin to avoid time limit exceed.

    Source




    KMP算法

    设字符串的长度为l,假设l%(l-next[l])=0。该序列为循环序列,循环节长度为l-next[l],答案即为l/(l-next[l]);反之则不为循环序列。答案为1。




    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    #define F(i,j,n) for(int i=j;i<=n;i++)
    #define D(i,j,n) for(int i=j;i>=n;i--)
    #define ll long long
    #define pa pair<int,int>
    #define maxn 1000010
    #define inf 1000000000
    using namespace std;
    char s[maxn];
    int l,nxt[maxn];
    inline void getnext()
    {
    	int i=0,j=-1;
    	nxt[0]=-1;
    	while (i<l)
    	{
    		if (j==-1||s[i]==s[j]) nxt[++i]=++j;
    		else j=nxt[j];
    	}
    }
    int main()
    {
    	scanf("%s",s);
    	while (s[0]!='.')
    	{
    		l=strlen(s);
    		getnext();
    		if (l%(l-nxt[l])==0) printf("%d
    ",l/(l-nxt[l]));
    		else printf("1
    ");
    		scanf("%s",s);
    	}
    }
    


  • 相关阅读:
    MYSQL--事务处理
    phpStudy + JspStudy 2014.10.02 下载
    ThinkPHP实现跨模块调用操作方法概述
    ThinkPHP整合百度Ueditor图文教程
    PHP获取今天、昨天、明天的日期
    获取客户端IP地址定位城市信息
    samba服务器概述
    Linux下好玩的命令
    一张网页的旅行
    PHP获取中英文混合字符串长度及截取
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7079795.html
Copyright © 2011-2022 走看看