poj 2406 Power Strings(KMP)
来源:互联网 发布:淘宝网无线话筒 编辑:程序博客网 时间:2024/04/30 02:10
Power Strings
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 44585 Accepted: 18625
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
abcdaaaaababab.
Sample Output
143
Hint
This problem has huge input, use scanf instead of cin to avoid time limit exceed.
思路:KMP,next表示模式串如果第i位(设str[0]为第0位)与文本串第j位不匹配则要回到第next[i]位继续与文本串第j位匹配。则模式串第1位到next[n]与模式串第n-next[n]位到n位是匹配的。所以思路和上面一样,如果n%(n-next[n])==0,则存在重复连续子串,长度为n-next[n]。
#include<cstdio>#include<cstring>int next[1000010];char str[1000010];void get_next(){ int i = 0 , j = -1; next[0] = -1; int len=strlen(str); while(i < len) { if(j == -1 || str[i] == str[j]){ ++i; ++j; next[i] = j; } else j = next[j]; }}int main(){ while(~scanf("%s",str)) { if(str[0] == '.') break; int len = strlen(str); get_next(); if(len%(len-next[len]) == 0) printf("%d\n",len / (len-next[len])); else printf("1\n"); } return 0;}
0 0
- poj 2406:Power Strings(KMP)
- poj 2406 Power Strings(kmp算法)
- POJ 2406 Power Strings(kmp)
- POJ 题目2406 Power Strings(KMP)
- POJ 2406 Power Strings(kmp)
- poj 2406 Power Strings (KMp)
- POJ 2406 Power Strings (KMP)
- POJ 2406 Power Strings(KMP)
- poj-2406-Power Strings(KMP)
- poj 2406 Power Strings(kmp)
- poj 2406Power Strings(KMP入门)
- poj 2406 Power Strings(KMP || 暴力)
- poj 2406 Power Strings(KMP)
- POJ 2406 Power Strings(KMP)
- 【POJ】2406 - Power Strings(KMP)
- POJ 2406 Power Strings(KMP)
- poj 2406 Power Strings-字符串(kmp)
- poj 2406 Power Strings(KMP)
- MySql5.7配置主从复制
- java DES加密解密实现
- 二两橙子的前端之路- -创建GitHub远程仓库
- java环境搭建基础知识
- Linked List Cycle II
- poj 2406 Power Strings(KMP)
- C++ 引用计数技术及智能指针的简单实现
- 练习2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
- 电脑快捷键
- NYOJ 12 喷水装置(二)【贪心+区间覆盖】
- Quartz.net使用入门(二)
- 各种一级导航条
- 第二周-项目3 体验复杂度-汉诺塔问题
- Java流编程实例之二--文件流