有一天,欧姆诺姆发现了一串长度为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个宝石可以组成漂亮的宝石项链。Sample Input

样例输入1
7 2
bcabcab

Sample Output

样例输出1
0000011 满足ABABA..A或者ABAB...B的情况都可以切一下,第二种情况可以看做A = "",假如总串是acdebacdebacde,答案是00000000011111,第一处A = "",B = "acdeb",第二处A = "a",B = "cdeb",第三处A = "ac",B = "deb",第四处...
用kmp可以求出循环节,设循环的串为s,在第i个位置,只要满足两种情况就可以,需要选出k+1个A和k个B,第一种情况不能被s完全覆盖,会多出来一块,只要多出来的一块含有的s小于AB含有的s就可以,A < AB,对于第二种情况就是第一种情况的基础上满足等于,
如果是k+1个AB,完全可以把B看做空串,那就是k+1个A和k个空串了。
代码:
#include <iostream>
#include <queue>
#include <cmath>
#include <string>
#include <cstring>
#include <vector>
#include <cstdio> using namespace std;
int nex[],n,k;
char s[],ans[];
void getnex(char *t,int len)
{
nex[] = -;
int i = ,j = -;
while(i < len)
{
if(j == - || t[i] == t[j])
{
nex[++ i] = ++ j;
}
else j = nex[j];
}
}
int main()
{
scanf("%d%d%s",&n,&k,s);
getnex(s,n);
for(int i = ;i <= n;i ++)
{
int d = i / (i - nex[i]);
ans[i - ] = '' + ((i % (i - nex[i])) ? d / k > d % k : d / k >= d % k);///快速输出。循环输出太慢了。数据量太大。
}
ans[n] = ;
printf("%s",ans);
}

最新文章

  1. python取mysql数据写入excel
  2. getRealPath(&quot;/&quot;)弃用
  3. mysql 存储过程 -- 游标的使用(备忘)
  4. eclipse 点击 open Implementation就退出eclipse
  5. 与IO相关的等待事件troubleshooting-系列5
  6. cocos2dx 实现华丽丽的滚动层.
  7. canvas新属性
  8. 百度云BAE3.0 的ssh构造(本机ssh项目迁移到BAE3.0)
  9. WebStorm 自定义字体+颜色+语法高亮+导入导出用户设置
  10. 【摘】Oracle 11g EM安全证书问题无法访问的解决办法
  11. 为什么大一先要学C语言(面向过程)再学C++或JAVA(面向对象)?
  12. 学习java的第4天 (2019-03-21 11:49)
  13. python note 01 计算机基础与变量
  14. 如何执行超过一百兆(100MB)的sql脚本?
  15. JAVA Socket编程和C++ Socket编程有什么不同
  16. ASI 实现注册方法的小例子(get和post方式)
  17. Qt使用gtest进行C++单元测试-01
  18. 模板优化 运用 function 及 外部模板
  19. ubuntu server vsftpd 匿名用户上传下载及目录设置
  20. Oracle 更新Opatch、打补丁

热门文章

  1. POJ 1383 Labyrinth (bfs 树的直径)
  2. Spring 使用RedisTemplate操作Redis
  3. Rhybox播放mp3, smplayer如何播放flv等等
  4. Crypko 基于滚动条进行的动画是如何实现的?
  5. 使用spring提供的@Scheduled注解创建定时任务
  6. 测开之路一百二十三:快速搭建python虚拟环境
  7. value_counts()函数
  8. C# Thread3——前台线程后台线程
  9. jmeter逻辑控制详解(1)
  10. 排序算法六:计数排序(Counting sort)