题目描述

  给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成。如:ababab,最多由3个ab连接而成。

输入输出格式

输入格式

  若干行,每行一个字符串。

  当读入到“.”时结束程序。

输出格式

  若干行,为对应的答案。

输入输出样例

输入样例

abcd

aaaa

ababab

.

输出样例

1

4

3

题解

  这道题可以用字符串hash或kmp来做。

  主要就是要将这道题转换成求最长前缀满足同为后缀。

  假设在s[1...n]中,s[1...i]为前缀且s[n-i+1...n]为后缀,那么当i>=n-i+1时,s[1...n-i]=s[n-i+1...n-i+1+n-i]=...=s[i+1][n],继续推下去,可以证得当i|n时,i就是其中相同子串中的一个,求出最长的i即可得出结果。

#include <cstdio>
#include <cstring> #define MAX_N 1000000 using namespace std; int n;
const unsigned long long b = ;
char s[MAX_N | ];
unsigned long long p[MAX_N | ], h[MAX_N | ]; int main()
{
p[] = ;
for(register int i = ; i < MAX_N; ++i)
{
p[i] = p[i - ] * b;
}
int op;
while(scanf("%s", s))
{
op = ;
n = strlen(s);
if(n == && s[] == '.') break;
h[] = s[];
for(register int i = ; i < n; ++i)
{
h[i] = h[i - ] * b + s[i];
}
for(register int i = ; i < n; ++i)
{
if(h[n - i - ] == h[n - ] - h[i - ] * p[n - i])
{
if(n % i) continue;
printf("%d\n", n / i);
op = ;
break;
}
}
if(!op) printf("1\n");
}
return ;
}

参考程序(字符串hash)

#include <cstdio>
#include <cstring> #define MAX_N 1000000 using namespace std; int n;
char a[MAX_N | ];
int p[MAX_N | ]; int main()
{
while(scanf("%s", a) && (a[] ^ '.'))
{
n = strlen(a);
p[] = -;
for(register int i = , j = -; i + < n; ++i)
{
while(j >= && (a[i + ] ^ a[j + ])) j = p[j];
if(a[i + ] == a[j + ]) ++j;
p[i + ] = j;
}
if(n % (n - p[n - ] - )) printf("1\n");
else printf("%d\n", n / (n - p[n - ] - ));
}
return ;
}

参考程序(kmp)

【题解】Power Strings的更多相关文章

  1. Power Strings[poj2406]题解

    Power Strings Description - Given two strings a and b we define ab to be their concatenation. For ex ...

  2. Power Strings(kmp妙解)

    Power Strings Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tota ...

  3. 「UVA10298」 Power Strings(KMP

    题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 abcd aaaa ababab . 输出样例#1: 复制 1 4 3 题解 Luogu的题解 这里是对目前 ...

  4. poj2406 Power Strings (kmp 求最小循环字串)

    Power Strings   Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 47748   Accepted: 19902 ...

  5. 【poj 2406】Power Strings 后缀数组DC3模板 【连续重复子串】

    Power Strings 题意 给出一个字符串s,求s最多由几个相同的字符串重复而成(最小循环节的重复次数) 思路 之前学习KMP的时候做过. 我的思路是:枚举字符串的长度,对于当前长度k,判断\( ...

  6. POJ 2406 Power Strings (KMP)

    Power Strings Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 29663Accepted: 12387 Descrip ...

  7. POJ 2406 Power Strings

    F - Power Strings Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  8. poj 2406:Power Strings(KMP算法,next[]数组的理解)

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 30069   Accepted: 12553 D ...

  9. POJ 2406:Power Strings

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 41252   Accepted: 17152 D ...

  10. E - Power Strings,求最小周期串

    E - Power Strings Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. Net Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程

    在Asp.Net Core 中使用外部登陆(google.微博...)   原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET C ...

  2. 20155235 《网络攻防》 实验八 Web基础

    20155235 <网络攻防> 实验八 Web基础 实验内容 Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表 ...

  3. 记一次SpringMVC碰到的坑

            在SpringMVC中,我们Controller中接收比如表单的参数,只要保证方法的形参的名字和表单中input元素的的name一样就可以接收到参数.         但是,我开发的一 ...

  4. 蒙提霍尔游戏 python 模拟

    本文使用蒙特卡罗方法验证蒙提霍尔游戏的结论. 以下代码,本人原创! 完整代码 import random # 蒙提霍尔游戏 def play_game(strategy='nonchange'): # ...

  5. Ubuntu+Qt+OpenCV+FFMPEG环境搭建

    基于ubuntu16.04下opencv3.2安装配置 Ubuntu16.04下安装FFmpeg(超简单版) Qt编译后提示: /usr/bin/ld: 找不到 -lGL 安装libGL: sudo ...

  6. C语言与数据库操作入门(Win版)

    C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...

  7. Js_数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  8. centos 7 tomcat 开机自启

    第一章 1.将tomcat加入开启自己,以减少手动启动的麻烦 环境配置需要提前配置好.(我这里已经是不做操作了) 192.168.1.195 jdk1.8 +  tomcat 8 第二章 2.编写to ...

  9. 从浏览器输入URL到显示页面到底发生了什么?

    首先说明一下,当系统本地缓存了你所请求的资源时,会直接把缓存内容解析并显示,而不会进行以下的一系列行为. 一.DNS域名解析 至今的计算机数量可谓是数不胜数,而它们的唯一识别身份就是ip地址.我们常说 ...

  10. 华为笔试——C++字符串四则运算的实现

    题目:字符串四则运算的实现 有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值.四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9),运算 ...