题目描述

PDF

输入输出格式

输入格式:

输出格式:

输入输出样例

输入样例#1:
复制

abcd
aaaa
ababab
.
输出样例#1: 复制

1
4
3

题解

Luogu的题解

这里是对目前最高赞题解结论的证明。

结论:设字符串长度为$n$,最长相同前后缀的长度为$next[i]$,

如$n$%$(n-next[n])=0$,则答案为$n/(n-next[n])$,否则为$1$。

证明:

我们求$next$数组的时候,相当于每次把当前串这样对齐了一下↓

而$next$求到$n$时,上面串的$n$对应的就是下面串的$next[n]$。

这时候的$n-nxt[n]$就是箭头指向的绿色部分。

而上下两串其实是一样的,所以下面串的前$n-nxt[n]$格和上面串的前$n-nxt[n]$相同。

又因为两串由蓝色框住的部分匹配,所以下面的绿框对应的部分和绿框相同。

依此递推,可以得到,**如果循环节多于一个**,以前$n-nxt[n]$个为循环节,是可以铺满整串的。而且因为$nxt[n]$是尽量大的,所以这样得到的循环节长度为所有可能情况中最小的,也就是我们所求的。

而如果$n$%$(n-next[n])≠0$,可以认为之前的循环节匹配仍然可以进行,但是最后一个循环节被强行割掉了一些。

显然这样就怎么都安排不上了。

所以如$n$%$(n-next[n])=0$,就能排上,答案为$n/(n-next[n])$,否则只能以自己为循环节,答案为$1$。

代码实现的时候注意一下自己代码中$n$的定义和$nxt$数组的定义什么的。

还是放一下我的代码叭qwq

 /*
qwerta
UVA10298 Power Strings
Accepted
代码 C++,0.65KB
提交时间 2018-10-12 17:59:53
耗时/内存
100ms, 0KB
*/
#include<iostream>
#include<cstdio>
using namespace std;
int nxt[];
int main()
{
//freopen("a.in","r",stdin);
while()
{
string s;
getline(cin,s);//读入一整行,放进s
if(s.length()==&&s[]=='.')break;
int lens=s.length();
//kmp求next
int k=-;
nxt[]=-;
for(register int i=;i<lens;++i)
{
while(k!=-&&s[i]!=s[k+])k=nxt[k];
if(s[i]==s[k+])k++;
nxt[i]=k;
}
int n=lens-;
if((n+)%(n-nxt[n])==)//如果能恰好排满循环节
printf("%d\n",((n+)/(n-nxt[n])));//输出总长除以循环节长度
else printf("1\n");//否则输出1
}
return ;
}

吐槽:拿来做模拟题压轴被吐槽是结论题......

明明前两天才讲过啊!(摔

「UVA10298」 Power Strings(KMP的更多相关文章

  1. poj2406 Power Strings(kmp)

    poj2406 Power Strings(kmp) 给出一个字符串,问这个字符串是一个字符串重复几次.要求最大化重复次数. 若当前字符串为S,用kmp匹配'\0'+S和S即可. #include & ...

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

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

  3. poj2406 Power Strings(kmp失配函数)

    Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 39291 Accepted: 16315 Descr ...

  4. 【POJ2406】 Power Strings (KMP)

    Power Strings Description Given two strings a and b we define a*b to be their concatenation. For exa ...

  5. Power Strings(KMP)

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 45008   Accepted: 18794 D ...

  6. poj 2406 Power Strings(KMP入门,next函数理解)

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 37685   Accepted: 15590 D ...

  7. POJ 2406 Power Strings(KMP)

    Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...

  8. poj 2406 Power Strings(kmp应用)

    题目链接:http://poj.org/problem?id=2406 题意:给出一个字符串s,求重复子串出现的最大次数. 分析:kmp的next[]数组的应用. 要求重复子串出现的最大次数,其实就是 ...

  9. 【TOJ 2406】Power Strings(KMP找最多重复子串)

    描述 Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc& ...

随机推荐

  1. Don't Panic! KRACK 没你想象的那么糟

    上海交通大学密码与计算机安全实验室(LoCCS)软件安全小组(GoSSIP)版权所有,转载请与作者取得联系! 著名的计算机学术安全会议CCS在2017年录用了一篇名为Key Reinstallatio ...

  2. SVN服务器配置说明 【转】

    http://www.cnblogs.com/ricksun/articles/1564905.html 1.前 言 花了72小时,终于把 Subversion 初步掌握了.从一个连“什么是版本控制” ...

  3. UVA - 10603 Fill(隐式图搜索)

    题目大意:经典的倒水问题. 给你三个瓶子,体积为a,b,c. 刚開始a.b是空的,c是满的,如今要求你到出体积为d的水.倒水的规则为,要么倒水方为空,要么接水方满 问倒到容量为d时,倒水的最小体积是多 ...

  4. d3js 画布 概念

    HTML 5 提供两种强有力的“画布”:SVG 和 Canvas. SVG 有如下特点: SVG 绘制的是矢量图,因此对图像进行放大不会失真. 基于 XML,可以为每个元素添加 JavaScript ...

  5. C++继承:公有,私有,保护(转)

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...

  6. C语言-二维背包问题

    二维费用背包问题 问题: 二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有 一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价 ...

  7. python(25)- 面向对象补充Ⅰ

    一.如何使用类 1.实例化:创建对象 类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征. 例子一 x=int(10) print(x) python中一切 ...

  8. Libx264 编码错误 Input picture width(320) is greater than stride (0)

    Ffmpeg libx264编码出现 Input picture width(320) is greater than stride (0),问题出在视频格式不正确. libx264 编码要求输入源的 ...

  9. JavaScript 日期格式化 简单有用

    JavaScript 日期格式化 简单有用 代码例如以下,引入jquery后直接后增加下面代码刷新可測试 Date.prototype.Format = function (fmt) { //auth ...

  10. YUV格式

    http://blog.csdn.net/u011270282/article/details/50696616 http://blog.csdn.net/acs713/article/details ...