博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[manacher] hdu 3294 Girls' research
阅读量:6119 次
发布时间:2019-06-21

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

题意:

给一个字符x代表真实的a 然后输出的时候转换

然后就是求最长回文子串的串是什么 长度要大于1

思路:

就是裸的manacher,弄清楚下标的转换关系就好了

代码:

#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"map"#include"vector"#include"string"#define inf 0x7fffffff#include"iostream"#define ll __int64using namespace std;#define N 200005char a[N],b[N*2];int rad[N*2];int main(){    char x[2];    while(scanf("%s%s",x,&a[1])!=-1)    {        int maxl,maxid,id;        int i,len;        for(i=1; a[i]; i++)        {            b[i*2]=a[i];            b[i*2+1]='#';        }        len=2*i;        b[0]='?';        b[1]='#';        b[len]='\0';        maxid=id=0;        maxl=0;        int ansi;        for(i=1; i
i) rad[i]=min(rad[2*id-i],maxid-i); else rad[i]=1; while(b[i-rad[i]]==b[i+rad[i]]) { rad[i]++; } if(rad[i]+i>maxid) { maxid=rad[i]+i; id=i; } if(rad[i]>maxl) { maxl=rad[i]; ansi=i; } } if(maxl-1<2) puts("No solution!"); else { int kk=x[0]-'a'; int ans=maxl-1,ansl,ansr; ansl=(ansi-(ans-1))/2-1; ansr=ansl+ans-1; printf("%d %d\n",ansl,ansr); for(int i=ansl; i<=ansr; i++) { if(a[i+1]-kk<'a') printf("%c",'z'+1-'a'+(a[i+1]-kk)); else printf("%c",a[i+1]-kk); } puts(""); } } return 0;}

转载地址:http://snmka.baihongyu.com/

你可能感兴趣的文章
canvas
查看>>
antd form表单一行多个组件并对其校验
查看>>
远程Debug Java进程的方法
查看>>
【跃迁之路】【565天】程序员高效学习方法论探索系列(实验阶段322-2018.08.24)...
查看>>
Docker 笔记(3):docker-compose
查看>>
高程3总结#第21章Ajax与Comet
查看>>
高程3总结#第1章JavaScript简介
查看>>
Slog37_支配vue框架初阶项目之博客网站-注册页面-合并首页、登陆和注册页面
查看>>
设计模式
查看>>
响应式设计之 —— 媒体查询
查看>>
秋招面经。持续更新中。
查看>>
1-Django基本流程走通
查看>>
记录一篇redux-saga的基本使用过程
查看>>
阿里巴巴的AI算法程序媛是怎样的一种存在?
查看>>
access key 笔记
查看>>
小轮子:无需重构,向下兼容,在既有项目中用vue的方式开发微信小程序
查看>>
dayjs 源码解析(四)(Dayjs 类)
查看>>
【大数据实践】Kafka生产者编程(2)——producer发送流程
查看>>
聊聊eureka server的instance注册及元数据变更接口
查看>>
webpack源码分析之一:文件打包
查看>>