给一个字符串,只能再右边加字符,问构成回文串最少要多少个字符。
可以知道,只有当回文串的右边延伸到最右端才可能构成一组解
然后利用mp[i] - 1 的含义是回文半径,并且最左右段都是原数组的字符。
判断一下即可

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>using namespace std;
const int N = 1e6 + 10;
int n,cas,mp[N*2],l,len;
char s[N],a[N*2];
void manacher(){l = 0;a[l++] = '$';a[l++] = '%';for(int i = 0;i<len;i++){a[l++] = s[i];a[l++] = '%';}int id = 0,mx = 0;for(int i = 0;i<l;i++){mp[i] = mx > i ? min(mp[2*id-i],mx -i): 1;while(a[i+mp[i]] == a[i-mp[i]]) mp[i]++;if(i + mp[i] > mx) {mx = i + mp[i];id = i;}}
}
int main(){scanf("%d",&n);while(n--){scanf("%s",s);len = strlen(s);manacher();int ans = len-1;//for(int i = 0;i<l;i++) cout<<a[i]<<' ';cout<<endl;//for(int i = 0;i<l;i++) cout<<mp[i]<<' ';cout<<endl;for(int i = 0 ;i<l;i++){int tmp = (i + (mp[i] -1)- 1 ) / 2 - 1;if(tmp == len -1) ans = min(ans,(i-(mp[i]-1)+1)/2 - 1 );}printf("Case %d: %d\n",++cas,len+ans);}return 0;
}

Lightoj 1258相关推荐

  1. Pairs Forming LCM LightOJ - 1236

    Pairs Forming LCM LightOJ - 1236 题意 问共有多少组数的最大公约数是n 分析 组合数学 ,唯一分解定理 参考代码 int Prime[670000]; const in ...

  2. LightOJ 1364 Expected Cards(概率+DP)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1364 题意:一副牌.依次在桌面上放牌.求放了四种花色的牌为C,D,H,S张时放的牌数的 ...

  3. lightoj 1014

    lightoj 1014 Ifter Party 链接:http://www.lightoj.com/volume_showproblem.php?problem=1014 题意:给你两个数 p, l ...

  4. LightOJ 1095 Arrange the Numbers(容斥原理)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意:给出数字n,m,K(0<K<=m<=n).在n个 ...

  5. [A Dangerous Maze LightOJ - 1027 ][概率题]

    A Dangerous Maze LightOJ - 1027 题目大意:就是你有nnn个门每次你都会随机选一个门,这个门对应得数值如果是负的那么你将会在aia_iai​的时间后回到原来位置,如果是正 ...

  6. S - Extended Traffic LightOJ - 1074

    S - Extended Traffic LightOJ - 1074 题意: 每个点有一个点权,边权为边的(终点点权-起点点权)的立方, 求从 1 出发的最短路 思路一:DJ,太简单了 结果一发WA ...

  7. Prim算法求权数和,POJ(1258)

    题目链接:http://poj.org/problem?id=1258 解题报告: #include <iostream> #include <stdio.h> #includ ...

  8. LightOJ 1088 - Points in Segments 二分

    http://www.lightoj.com/volume_showproblem.php?problem=1088 题意:给出N个点,Q个查询,问在区间内的点数有多少个. 思路:直接在线二分,注意边 ...

  9. LightOJ 1422:Halloween Costumes(区间DP入门)

    http://lightoj.com/volume_showproblem.php?problem=1422 题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉 ...

最新文章

  1. CSS入门-五个简单,但有用的CSS属性
  2. VC++6.0如何删除文件
  3. Windows Server 2003防黑小秘决
  4. Navicatfor mysql怎么设置唯一约束
  5. xss植入_xss的高级利用
  6. Sublime Text的使用技巧
  7. OpenCV中Mat的属性
  8. linux技巧----查找某个正在执行的脚本
  9. 前端学习(3244):react的生命周期新
  10. python中cmd是什么_python中的cmd是什么
  11. 渗透测试入门24之渗透测试参考书、课程、工具、认证
  12. docker用gpu的参数_ZStack实践汇 | ZStack+Docker支撑GPU业务实践
  13. 哪些数据类型能使用切片操作python_Python学习之路「16」非数字数据类型-切片-slice...
  14. 学校的图书馆,很漂亮哦
  15. python微信语音转发方法_涨知识,微信语音能转发给别人啊,方法还那么简单
  16. 2017服务器cpu性能排行,桌面CPU性能排行 CPU天梯图2017年7月最新版
  17. linux卸载软件wine,Ubuntu 卸载wine
  18. c语言程序设计基础谭成予答案,c语言程序设计基础谭成予答案
  19. Summary of defect detection algorithms based on deep learning
  20. RestTemplate源码剖析:Encode

热门文章

  1. 使用滴滴mpx 开发一个小程序组件
  2. 关于编程语言和编程工具
  3. Web返回结果和HTTP状态码详解
  4. 结缘OpenStack:运营商NFV部署加速 要开源也要保障
  5. 《Linux 驱动:输入子系统》
  6. wordpress配置菜单栏
  7. RecyclerView与CardView的使用
  8. BOSS 业务运营支撑系统
  9. Intel SGX开发者参考书(四)—— Enclave开发基础(三)
  10. Windows Server 2012修改光驱盘符