【UVa】10298 - Power Strings

来源:互联网 发布:凸优化 中文版 pdf 编辑:程序博客网 时间:2024/06/05 16:25

Problem here


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

Solution

#include <iostream>#include <string>//#include <fstream>#define MAX_NUM 9999999using namespace std;//ifstream fin("10298.in");//ofstream fout("10298.out");int next_pos[1000001];void getNext(string str){    next_pos[0] = -1;    int j = 0, k = -1;    while(j < str.size()){        if(k == -1 || str[j] == str[k]){            next_pos[++j] = ++k;        }        else{            k = next_pos[k];        }    }}int main(){    string input;    while(cin >> input){        if(input == ".")            break;        getNext(input);        int length = input.size();        if(length % (length- next_pos[length]) == 0 && next_pos[length] != 0)            cout << length / (length - next_pos[length]) << endl;        else            cout << 1 << endl;    }    return 0;}
0 0
原创粉丝点击