题目描述

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. 电话号码 【trie树】

    电话号码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀. 比方: Emerg ...

  2. Host Controller transport layer and AMPs

    The logical Host Controller Interface does not consider multiplexing/routing over the Host Controlle ...

  3. Odoo10尝鲜:MRP 10 新概念

    OEE [ overall equipment Effectiveness 整体设备效率 ] 整體設備效率是整合稼働率 (Availability).產能效率 (Performance).良率 (Qu ...

  4. yum安装nginx+PHP+Mysql

    #mkdir /var/www/yum_repo 1.nginx安装: 在http://nginx.org/en/linux_packages.html#stable中下载CentOSX对应版本的rp ...

  5. 算法排序-NB三人组

    快速排序: 堆排序: 二叉树: 两种特殊二叉树: 二叉树的存储方式: 小结: 堆排序正题: 向下调整: 堆排序过程: 堆排序-内置模块: 扩展问题topk: 归并排序: 怎么使用: NB三人组小结

  6. POJ 3469(Dual Core CPU-最小割)[Template:网络流dinic V2]

    Language: Default Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 19321 ...

  7. ubuntu 下的中文输入法的安装和配置- ibus

    ibus输入法 Chinese语言包安装 首先需要给Ubuntu16.04安装Chinese语言包支持.  如上图点击其中的Install/Remove Languages…,这个对话框是通过syst ...

  8. Machine Learning: 一部气势恢宏的人工智能发展史

    转载自:雷锋网 本文作者:陈圳 2016-09-12 09:46 导语:机器学习的从产生,发展,低潮和全盛的历史 雷锋网(公众号:雷锋网)按:本文作者DataCastle数据城堡,主要介绍了机器学习的 ...

  9. eclipse的快捷键(常用)

    1. Ctrl+O 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用. 2. Ctrl+M 窗口最大化和还原,用户在窗口中进行操作时,总会觉得当前窗口小(尤其在编写代码时), ...

  10. 高性能MySQL(三)

    服务器性能剖析 性能优化概述 性能优化是降低CPU使用率?错误,资源就是用来消耗的,新版本MySQL的InnoDB引擎对资源的利用率还增高了,所以这不是一个好的衡量标准. 提升每秒查询量?其实就是吞吐 ...