题目为中文,因而不再解释题意。

首先遵循如下设定可以有以下几个结论:
1,首先谈论下KMP的一个特殊性质:对于某一个特立独行的字符串:例如ABCDEF,在建立有限状态自动机之后,都会有,所有元素的失配边,指向0,也就是初始的那个元素。此时我们可以讲这个独立的元素及之前字符串理解为“ 一个循环次数为1的循环串 ”。对于其他情况,形如:ABCDEFGAB,可以将ABCDEFG理解为一个循环串,AB为下一个循环的两个多余元素,因此,我们可以把任意字符串看成“ 一个循环串+若干独立元素 ”的巧妙形式。

2,对于该形式,都可以发现,对于第K号元素最小循环节的尺寸应当为“ K-F[K] ”(随着规约不同增减1,此处采用刘汝佳蓝书中KMP的规约),那么,我们可以在这个基础上求出来“最小循环节”循环的次数——K/(K-F[K])。

3,应当认为,任意一个串,都构成(AB)*N+A的的形式。区别仅仅在于N的取值

4,应当认为,任何一个循环串,形如(A+B)*N,都自然的可以被认为是(A+B+A+B)*N+(A+B)*k的形式,即可以将若干个相同的循环节看成一个大的循环节。

5,前文中,我们知道了,“如何求出循环串的最小循环节”,以及“最小循环节的长度”,从而可以求出“最小循环节出现的次数”。则对于给定目标m来说,很容易求出,满足有且仅有M个大循环节时,每个大循环节的 “  最小循环体数量    ”,同时,也可以求出来,在满足上述条件后,“ 剩余的循环体数量 ”容易理解,在任何情况下,剩余的循环体数量大于最小循环体数量则构成一个新的循环,意味着M+1明显不符合题设,应当直接排出。

回过头来发现刘汝佳蓝书第一道练习例题就讲的是这个233333333333

放AC代码如下:

#include<bits/stdc++.h>
using namespace std; const long long MAXN=; char tar[MAXN];
long long f[MAXN]; long long n,m;
void init()
{
cin>>n>>m;
cin>>tar; f[]=;f[]=;
for(int i=;i<n;++i)
{
int j=f[i];
while(j&&tar[i]!=tar[j])j=f[j];
f[i+]= tar[i]==tar[j]? j+:;
}
} int main()
{
cin.sync_with_stdio(false);
init();
for(int i=;i<=n;++i)
{
int val=i/(i-f[i]);
if(i%(i-f[i]))
{
if(val/m>val%m)cout<<;
else cout<<;
}else
{
if(val/m>=val%m)cout<<;
else cout<<;
}
} return ;
}

51nod 1554 KMP思维题的更多相关文章

  1. 51Nod 1277 字符串中的最大值(KMP,裸题)

    1277 字符串中的最大值 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如: ...

  2. zstu.4194: 字符串匹配(kmp入门题&& 心得)

    4194: 字符串匹配 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 206  Solved: 78 Description 给你两个字符串A,B,请 ...

  3. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  4. hdu 4763 Theme Section(KMP水题)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  6. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  7. HDU 1711 Number Sequence(KMP裸题,板子题,有坑点)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)

    思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...

  9. C. Nice Garland Codeforces Round #535 (Div. 3) 思维题

    C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

随机推荐

  1. iOS开发之数据存取

    http://www.cocoachina.com/ios/20141111/10190.html

  2. Java8 如何正确使用 Optional

    原文出处:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API.善用Optional可以使我们代码中很多繁琐 ...

  3. javascript动态修改对象的属性名

    在做东钿业务系统的时候,经常碰到写很多重复的ajax对接,于是就想封装一个方法,但是接收data的字段名不一样,所以就需要用到动态对象属性名这个写法了.其实很简单.直接看一下代码吧.

  4. git记录

    2017-3-30:git常用命令:1.$ git init:初始化git仓库2.$ git add *.c:跟踪文件3.$ git commit -m 'initial project versio ...

  5. pta编程题19 Saving James Bond 2

    其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...

  6. bzoj2600 [Ioi2011]ricehub

    Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...

  7. iOS keychain注解

    + (NSMutableDictionary *)getKeychainQuery:(NSString *)service { return [NSMutableDictionary dictiona ...

  8. Nginx源码安装及调优配置(转)

      导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前 ...

  9. Problem K: 搜索基础之棋盘问题

    Problem K: 搜索基础之棋盘问题 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 92  Solved: 53[Submit][Status][W ...

  10. 20.JSON

    JSON是javascript的一个子集,利用js中的一些儿模式来表示结构化数据.不是只有javascript才使用JSON,JSON是一种数据格式,很多编程语言都有针对JSON的解析器和序列化器. ...