zoukankan      html  css  js  c++  java
  • poj-2406-Power Strings(KMP)

    Power Strings
    Time Limit: 3000MS   Memory Limit: 65536K
    Total Submissions: 38544   Accepted: 16001

    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.

    /*一个裸的KMP,最后判断一下是否循环*/
    #include<stdio.h>
    #include<string.h>
    int p[1000010];
    char str[1000010];
    int len;
    void getp()
    {
    	int i=0,j=-1;
    	p[i]=-1;
    	while(i<len)
    	{
    		if(j==-1||str[i]==str[j])
    		{
    			i++,j++;
    			p[i]=j;
    		}
    		else
    		j=p[j];
    	}
    }
    int main()
    {
    	while(scanf("%s",str)!=EOF)
    	{
    		memset(p,0,sizeof(p));
    		len=strlen(str);
    		getp();
    		if(strcmp(str,".")==0)
    		break;
    		if(len%(len-p[len])==0)
    		printf("%d
    ",len/(len-p[len]));
    		else printf("1
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    input文本框输入限制(正则表达式)
    SQL Server通用型分页存储过程
    简单易学的数据图表
    HTML中input文本框只读不可编辑的方法
    SQL添加外键约束的方式
    +1 也要睁着眼
    博客园的自定义皮肤
    网站收集整理
    jQuery extend方法介绍
    HTML5本地存储
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273803.html
Copyright © 2011-2022 走看看