题目链接:http://codeforces.com/contest/443/problem/B

题目意思:给出一个只有小写字母的字符串s(假设长度为len),在其后可以添加 k 个长度的字符,形成一个长度为len+k的新串 s'。问在 s' 中,可以形成的最长tandem repeat 是 多长。tandem repeat 的定义是:si = si+n (1 <= i <= n; 2*n <= k+len)

注意,这个tandem repeat 是相邻的!!也就是对于abcwerabc?? (??,表示可以添加的长度为k = 2),如果?? 填入we,并不代表之前的abcwe(a下标:0)== abcwe(a下标:6),因为中间多了个r  !答案其实是4。只能将?? 变为 bc,这样的tandem repeat 的长度为2*2 = 4(两个bc相等)

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = + ;
char str[maxn]; int main()
{
int k;
while (scanf("%s%d", str, &k) != EOF)
{
int len = strlen(str);
if (len <= k)
printf("%d\n", (len+k)& ? len+k-: len+k);
else
{
int ans = ;
for (int i = ; i < len; i++) // 枚举原串s的每个位置
{
for (int j = i+; *j-i <= len+k; j++) // 2*j-i <= len+k:控制住si+n不大于新串s'的长度
{
bool ok = true;
for (int l = ; l < j-i && l+j < len; l++) // 枚举间隙,j-i代表间隙,也就是题目中si = si+n中的n
{
if (str[i+l] != str[j+l])
{
ok = false;
break;
}
}
if (!ok)
continue;
ans = max(ans, *(j-i));
}
}
printf("%d\n", ans);
}
}
return ;
}

  补充一点,对于l+j < len 这个条件是必不可少的!因为它保证比较的是原序列 s 的字符有 tandem repeat,这些字符是确定的。而对于后面添加的 k 个字符是不确定的,所以就不能单纯用str[i+l] = str[j+l] 来比较了。但由于有 2*j - i <= len+k,所以j 的值还是可以取的(一直ok = true),它默认 k 个字符中任意填字符,可以使得s' 有 tandem repeat,2*(j-i)就是求出repeat的长度了。

最新文章

  1. 基于Caffe的DeepID2实现(上)
  2. vim 使用
  3. 我的MySQL整理
  4. 用SignalR实现的共享画板例子
  5. NodeMCU初探
  6. HashMap和Hashtable的区别 源码分析
  7. MyEclipse常用插件使用教程
  8. tomcat部署web应用的4种方法
  9. 图形化的Git
  10. Jaxb解析xml准换为javabean
  11. 微信公众号开发之LBS
  12. Cocos2d-JS场景树
  13. java面向对象编程——第八章 类的高级概念
  14. 李洪强iOS开发之-PCH文件的配置
  15. MySql事务及隔离级别
  16. CentOS7时间设置问题
  17. mac centos linux 安装PHP扩展 INTL(国际化) ———— error: &#39;ext/standard/php_smart_str.h&#39;
  18. qt: qt install framework使用问题;
  19. 【转帖】解决远程连接MariaDB(mysql)很慢的方法
  20. System.ServiceProcess.TimeoutException: Time out has expired and the operation has not been completed.

热门文章

  1. 【Codeforces Round #503 (Div. 2)】
  2. 解决U3D4.1.5或以上无法启动MONODEV的方法
  3. 关于SIP一些总结
  4. Android Studio如何Format代码
  5. 【Lucene】具体解释Lucene全文检索的信息写入与读取
  6. 公司hadoop客户端试用
  7. Python中ConfigParser模块应用
  8. php闭包实例
  9. 第04章-VTK基础(2)
  10. Ajax_HTTP请求以及响应