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

    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

    这题就是求最小的循环节,直接用len-next[len] && next[len]!=0就行,对于len%(len-next[len])!=0要输出0.

    #include<stdio.h>
    #include<string.h>
    char s[1000006];
    int len,next[1000006];
    void nextt()
    {
    	int i,j;
    	i=0;j=-1;
    	memset(next,-1,sizeof(next));
    	while(i<len){
    		if(j==-1 || s[i]==s[j]){
    			i++;j++;next[i]=j;
    		}
    		else j=next[j];
    	}
    }
    
    int main()
    {
    	int n,m,i,j;
    	while(scanf("%s",s)!=EOF)
    	{
    		if(strcmp(s,".")==0)break;
    		len=strlen(s);
    		//printf("%d
    ",len);
    		nextt();
    		if(len%(len-next[len])==0 && next[len]!=0){
    			printf("%d
    ",len/(len-next[len]));
    		}
    		else printf("1
    ");
    	}
    }


  • 相关阅读:
    闰年的定义
    Sublime Text 3
    维特比算法(Viterbi)
    索引
    倒排索引
    URL过滤
    判断一个元素是否在集合中
    布隆过滤器
    jsp九大内置对象
    jsp九大内置对象和其作用详解
  • 原文地址:https://www.cnblogs.com/herumw/p/9464749.html
Copyright © 2011-2022 走看看