博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2015 多校联赛 ——HDU5371(manacher + 枚举)
阅读量:6156 次
发布时间:2019-06-21

本文共 1314 字,大约阅读时间需要 4 分钟。

 

Sample Input
1 10 2 3 4 4 3 2 2 3 4 4
 

 

Sample Output

Case #1: 9

 

要求找出一段数字。

将其分成3部分,第①和第②部分成回文字串,第②和第③部分成回文字串

用manacher算出各个点的回文字串长度,然点枚举和半径(后部分稍不注意就超时  - -!!)

 

#include 
#include
#include
#define MAXN 100010using namespace std;int n;int d[MAXN];int st[MAXN*2];int p[MAXN*2];int len;void manacher(){ int MaxId=0,id; for(int i=0; i
i) p[i]=min(p[2*id-i],MaxId-i); else p[i]=1; while(st[i+p[i]]==st[i-p[i]]) p[i]++; if(p[i]+i>MaxId) { id=i; MaxId=p[i]+i; } }}int main(){ int T; scanf("%d",&T); for(int t=1; t<=T; t++) { scanf("%d",&n); for(int i = 0; i <= 2*n+1; i++) p[i] =0; len = 0; st[len++]= -2; st[len++]= -1; for(int i=1; i<=n; ++i) { scanf("%d",&st[len++]); st[len++] = -1; } st[len] = 0; manacher(); int maxans=1; for(int i = 3; i < len; i+=2) for(int j = maxans; j <= p[i]; j+=2) { if(p[j+i-1] >= j) maxans = j; } printf("Case #%d: %d\n",t,(maxans)/2*3); } return 0;}

  

 

 

转载于:https://www.cnblogs.com/Przz/p/5409784.html

你可能感兴趣的文章
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>
amazeui学习笔记一(开始使用2)--布局示例layouts
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>
C#一个关于委托和事件通俗易懂的例子
查看>>
类似于SVN的文档内容差异对比工具winmerge
查看>>
Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
quratz线程
查看>>
execnet: rapid multi-Python deployment
查看>>
windows修改3389端口
查看>>