博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2406-Power Strings
阅读量:5343 次
发布时间:2019-06-15

本文共 1943 字,大约阅读时间需要 6 分钟。

Power Strings
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 27230   Accepted: 11401

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.
 
 
地址:
题意:ababab,ab重复了三次,于是输出3,abcd只有自身重复了一次,输出1.。。。。。
这么一道题做了一小天,一直在想,终于想出一个自我感觉很良好的方法,把输入的字符串复制一下,还是以a,b的形式,把b后移,每次移动j-next[j]个位子,然后把后面多出去的数改成'\0',于是用这个方式实现了好久,最终在一个细节上以失败告终,不死心想看看别人都怎么做的,看到了一句话解释next函数,
当一个字符串以0为起始下标时,next[i]可以描述为"不为自身的最大首尾重复子串长度"原来只会求next,却没去想它真正代表的含义是什么,这样就好想了,如果是abcabcabc的话,它的next为-1,-1,-1,0,1,2,3,4,5,可以发现,如果是有重复的子段,那么它的next一定是这种情况,如果len%(len-next[len-1]-1)==0的话,那么len/(len-next[len-1]-1)一定是要求的那个值。。。。。。。。知识没学透的代价啊。。。。。。。。
 
#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;char B[1000100];int next[1000010];void prekmp() { next[0] = -1; int j = -1; for (int i = 1; B[i]; i++) { while (j != -1 && B[i] != B[j + 1]) j = next[j]; if (B[i] == B[j + 1]) j++; next[i] = j; } int x=strlen(B); if(x%(x-next[x-1]-1)==0)printf("%d\n",x/(x-next[x-1]-1)); else printf("1\n");}int main(){ while(scanf("%s",B)&&strcmp(B,".")) { prekmp(); } return 0;}

 

转载于:https://www.cnblogs.com/2860359561snail/p/3230422.html

你可能感兴趣的文章
composer 安装laravel
查看>>
8-EasyNetQ之Send & Receive
查看>>
Android反编译教程
查看>>
List<string> 去重复 并且出现次数最多的排前面
查看>>
js日志管理-log4javascript学习小结
查看>>
Android之布局androidmanifest.xml 资源清单 概述
查看>>
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
本地MongoDB服务开启与连接本地以及远程服务器MongoDB服务
查看>>
跨域解决方案之CORS
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>
原生JS轮播-各种效果的极简实现
查看>>
软件工程总结作业---提问回顾与个人总结
查看>>