http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1554

题目:

有一天,欧姆诺姆发现了一串长度为n的宝石串,上面有五颜六色的宝石。他决定摘取前面若干个宝石来做成一个漂亮的项链。

他对漂亮的项链是这样定义的,现在有一条项链S,当S=A+B+A+B+A+...+A+B+A的时候是漂亮的,这儿A,B是一些宝石串,“+”表示连接操作。S中有k+1个A和k个B组成。A和B可能是空串。

现在给出宝石串,问怎么切前几个才能得到一个漂亮的宝石项链。他切下来之后不会改变宝石的顺序。

样例解释:

在这个样例中前6个可以组成漂亮的串( A="", B="bca")。前7个也可以(A="b", B="ca")。

Input
单组测试数据。
第一行有两个整数n, k (1≤n,k≤1 000 000),表示宝石串原始的长度和在上文中提到的参数k。
第二行有n个由小写字母组成的串,表示原始宝石串。
Output
输出一行有n个01组成的字符串。第i(1≤i≤n)个位置是1的时候表示前i个宝石可以组成漂亮的宝石项链。
Input示例
样例输入1
7 2
bcabcab
Output示例
样例输出1
0000011

那么,很显然这是KMP比较难的题。

(因为我最开始想了暴力,然而看了数据范围emmmmmm……)

这里我们可以将原串分为两种串S与T。

那么可能会将其分为SSS……SSS或SSS……SSST

对于第一种情况,显然我们可求S的个数num(num=n/(n-nxt[n]))(请见上篇文章

那么num/k就是ABAB……BABA中AB所包含的S的个数,自然的num%k就是A所包含的S的个数。

由于B可空,所以num/k>=num%k。

对于第二种情况,思考一下发现num的求法同上。

那么我们将A=T,B=(S-T)+SSS……SSS。

AB的S个数仍然是num/k,T的S个数仍然是num%k。

但是T!=S,所以num/k>num%k

(PS.本题输出量巨大,请使用快速的输出方式)

#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e6+;
char s[N];
int nxt[N];
char ans[N];
void getnext(int m){
int j=;
for(int i=;i<=m;i++){
while(j!=&&s[j+]!=s[i])j=nxt[j];
if(s[j+]==s[i])j++;
nxt[i]=j;
}
return;
}
int main(){
int m,k;
scanf("%d%d%s",&m,&k,s+);
memset(ans,'',sizeof(ans));
getnext(m);
for(int n=;n<=m;n++){
int num=n/(n-nxt[n]);
if(n%(n-nxt[n])==){
if(num/k>=num%k){
ans[n-]='';
}
}else{
if(num/k>num%k){
ans[n-]='';
continue;
}
}
}
ans[m]=;
puts(ans);
return ;
}
 

最新文章

  1. History API与浏览器历史堆栈管理
  2. 1.Linux常用命令
  3. 前端开发教程:使用 CSS3 Transforms 构建圆形导航
  4. 上中下三个DIV,高度自适应(上高度固定,下固定,中间自适应)(代码来自X人)
  5. python调用ggsci.exe程序
  6. ali笔试总结
  7. 安装jdk源码
  8. Leetcode 1 two sum 难度:0
  9. Win7家庭版包“已停止工作”
  10. Giraph之SSSP(shortest path)单机伪分布运行成功
  11. Sublime字体设置
  12. bzoj 1176 Mokia(CDQ分治,BIT)
  13. C# 实体model验证输出
  14. leetcode每日解题思路 221 Maximal Square
  15. Mapreduce参数调节
  16. Ubuntu 安装wireshark
  17. vue.js实现内部自定义指令和全局自定义指令------directive
  18. iOS ipa包瘦身------删除无用图片资源
  19. Python后台开发Django( 模板 与 值匹配 )
  20. javascript中的立即执行函数的原理

热门文章

  1. linux 安装 node.js
  2. 「日常训练」Known Notation(ZOJ-3829)
  3. jenkins--Jenkins+Git+coding+maven 实现自动化测试持续集成
  4. python numpy数据相减
  5. Android开发-API指南-&lt;activity&gt;
  6. adb 常用命令及操作
  7. 剑指offer-字符串的排列26
  8. 4. hadoop启动脚本分析
  9. JS判断是IOS还是Android以及如何解决h5打包后在ios下内容与状态栏重叠问题
  10. “Hello World!团队”Alpha发布—视频链接+文案+美工