1. // source code from laekov for c0x17
  2. #define PRID "fkqh"
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. const int maxn = ;
  10.  
  11. int n, l[maxn], q[maxn], vx[maxn], vy[maxn];
  12. char a[maxn];
  13.  
  14. void manacher() {
  15. l[] = ;
  16. for (int i = , j = ; i < (n << ) - ; ++ i) {
  17. int r = ((j + ) >> ) + l[j] - ;
  18. int p = i >> , q = i - p;
  19. l[i] = (r >= q) ? min(r - q + , l[(j << ) - i]) : ;
  20. while (p - l[i] >= && q + l[i] < n && a[p - l[i]] == a[q + l[i]])
  21. ++ l[i];
  22. if (q + l[i] - > r)
  23. j = i;
  24. }
  25. }
  26.  
  27. #define getLeft(x) (((x)>>1)-l[x]+1)
  28. #define getRight(x) ((((x)+1)>>1)+l[x]-1)
  29.  
  30. void dp(bool d) {
  31. static int q[maxn];
  32. int hd = , tl = ;
  33. if (!d) {
  34. for (int i = ; i < n; ++ i) {
  35. if (!tl || getRight(i << ) > getRight(q[tl - ]))
  36. q[tl ++] = (i << );
  37. while (getRight(q[hd]) < i)
  38. ++ hd;
  39. vx[i] = (i << ) - q[hd] + ;
  40. if (i < n - && getRight((i << ) + ) > getRight(q[tl - ]))
  41. q[tl ++] = (i << ) + ;
  42. }
  43. }
  44. else {
  45. for (int i = n - ; i >= ; -- i) {
  46. if (!tl || getLeft(i << ) < getLeft(q[tl - ]))
  47. q[tl ++] = (i << );
  48. while (getLeft(q[hd]) > i)
  49. ++ hd;
  50. vy[i] = q[hd] - (i << ) + ;
  51. if (i && getLeft((i << ) -) < getLeft(q[tl - ]))
  52. q[tl ++] = (i << ) - ;
  53. }
  54. }
  55. }
  56.  
  57. int main(int argc, char* args[]) {
  58. if (argc < || strcmp(args[], "-nf")) {
  59. freopen(PRID ".in", "r", stdin);
  60. freopen(PRID ".out", "w", stdout);
  61. }
  62. scanf("%s", a);
  63. n = strlen(a);
  64. manacher();
  65. dp();
  66. dp();
  67. int ans = ;
  68. for (int i = ; i < n; ++ i)
  69. ans = max(ans, vx[i - ] + vy[i]);
  70. printf("%d\n", ans);
  71. }

字符串模拟赛T2的更多相关文章

  1. 模拟赛T2 交换 解题报告

    模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...

  2. 20161023 NOIP 模拟赛 T2 解题报告

    Task 2.回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他 ...

  3. 20161003 NOIP 模拟赛 T2 解题报告

    Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...

  4. NOIP欢乐模拟赛 T2 解题报告

    小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...

  5. 20180530模拟赛T2——绀碧之棺

    题目背景 qiancl 得到了一张藏宝图,上面写了一道谜题. 题目描述 定义\(F(n)\)为 n 在十进制下各个数位的平方和,求区间\([a,b]\)中有多少\(n\)满足\(k\times F(n ...

  6. 20180519模拟赛T2——pretty

    [问题描述] 小美今天对于数列很有兴趣.小美打算找出一些漂亮的序列.一个漂亮的序列的限制如下: 长度为 n ,而且数列里只包含 [1,n] 的整数. 要不是不降的序列就是不升的序列. 小美想知道有多少 ...

  7. 20180516模拟赛T2——string

    题解 对于一个字符串A,我们只能把其首字符取出,故如果我们想让A串与B串相等,能重复利用的部分只能是A串结尾与B串开头相等的部分.对于取出的字符,我们可以把'o'放在一个容器中,把'x'放在另一个容器 ...

  8. 2019.11.11 模拟赛 T2 乘积求和

    昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...

  9. 5.12 省选模拟赛 T2 贪心 dp 搜索 差分

    LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...

随机推荐

  1. Expression 表达式树学习整理

    整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的来吧  它表示具有常量值的表达式 我们选建一个控制台应用程序 ConstantExpression _ ...

  2. unity3d 赛车游戏——复位点检测

    一直没有时间写博客 昨天我的CarWaypoints插件也告一段落了 今年没回家,过年就我一个人 挺无聊的,那就休息一天写几篇博客吧 我的代码可能很少,但是思路很重要 希望不懂的朋友别只copy代码 ...

  3. IT男的”幸福”生活"续9

    世界上最容易失去的便是时间了,我们总是蓦然回首,而时间早已流去. 曾经的种种,时时刻刻在我们脑中出现,让我们感到开心,快乐,幸福等. 有时好想有一种动冲,回到过去,再感受一下心中的那份触动. 又一年过 ...

  4. 【BZOJ 1019】【SHOI2008】汉诺塔(待定系数法递推)

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 559  Solved: 341[Submit][Status] ...

  5. 初探JAVA中I/O流(一)

    一.流 流,这里是对数据交换的形象称法.进程是运行在内存中的,在运行的过程中避免不了会与外界进行数据交互.比如将数据从硬盘.控制台.管道甚至是套接字(具体点应该是我们电脑上的网卡)读到我们进程锁所占据 ...

  6. angular的splitter案例学习

    angular的splitter案例学习,都有注释了,作为自己的备忘. <!DOCTYPE html> <html ng-app="APP"> <he ...

  7. java web名词解释

    来源于:http://www.cnblogs.com/yxnchinahlj/archive/2012/02/24/2366110.html PO(persistant object) 持久对象 在o ...

  8. 在CentOS上安装SQLServer

    Install SQL Server on Red Hat Enterprise Linux 参考上面这篇文章即可,需要注意的是内容大于3.25G,然后设置Sa密码的时候需要至少一个大写字母.一个小写 ...

  9. __HTML_5读取文件API

    //HTML5 __FileSystemApi <!doctype html> <html> <head> <meta charset="utf-8 ...

  10. strncmp很好的函数

    strcmp比较的是所有的长度,而strncmp可以比较前几个长度 strncmp(s1,s2,n);这样就比较了s1,s2,前n个长度的大小.