题面

这是一道诡异的黄题

居然让你求一串吧啦吧啦的东西中 字母(大小写)最长的回文串的长度,还要输出完整的串 吐血

思路:

保持淡定,我们啥都不会,就会Manacher,那就用Manacher大法!

1、把字符串处理成只有字母(去皮)

2、把字符串中插入#号(掺假)

3、Manacher跑一跑最长回文串长度(市场检查)

4、求出最长长度后再重新代入原来的字符串(打回原形!妖孽!)

然后,就完了~

就是去皮的时候,顺便记录一下字符的位置,这样重新代入时就比较方便

并且由于字符串有很多行,读入时就要用getchar(),直到EOF为止

似乎Noip2018普及T1有人因为这个WA?

Code:

#include<bits/stdc++.h>
#define M 20010
using namespace std;
struct node{
char c;
int id;
}a[M<<1];
char st[M],s[M<<1];
int l1,l2,len,ans,res;
int p[M<<1];
bool check(char c)
{
return (c>='a'&&c<='z')||(c>='A'&&c<='Z');
}
void init()
{
int i;
for(i=0;i<l1;i++)
if(check(st[i]))
{
a[l2].c=(st[i]>='a'&&st[i]<='z')? st[i]:st[i]-'A'+'a';
a[l2++].id=i;//记录编号(位置)
}
s[0]='!';
s[1]='#';
for(i=0;i<l2;i++)
{
s[i*2+2]=a[i].c;
s[i*2+3]='#';
}
len=l2*2+2;
s[len]='?';
return;
}
void manacher()//大法不解释
{
int id=0,mx=0;
for(int i=0;i<len;i++)
{
if(i<mx)
p[i]=min(p[id*2-i],mx-i);
else
p[i]=1;
while(s[i-p[i]]==s[i+p[i]])
p[i]++;
if(i+p[i]>mx)
{
id=i;
mx=i+p[i];
}
}
return;
}
void Print(int l,int r)
{
if(l&1)//由扩展后的s数组变回a数组
l=(l-3)/2;
else
l=(l-2)/2;
if(r&1)
r=(r-3)/2;
else
r=(r-2)/2;
for(int k=a[l].id;k<=a[r].id;k++)
printf("%c",st[k]);
return;
}
int main()
{
int i;
char c=getchar();//读入
while(c!=EOF)
{
st[l1++]=c;
c=getchar();
}
init();//初始化
manacher();//大法
for(i=0;i<len;i++)//求最长
ans=max(ans,p[i]);
for(i=0;i<len;i++)//求第一次出现的位置
if(p[i]==ans)
break;
ans--;
printf("%d\n",ans);
Print(i-ans+1,i+ans-1);//重新代入
return 0;
}

「Luogu P1210」回文检测 解题报告的更多相关文章

  1. 「Luogu P4987」回文项链 解题报告

    题面 求环中的长度为k(k为奇数)且回文中心不同的回文串个数 思路: 刚学manacher算法,就送上一道模板题,此题注重对manacher算法的理解 Manacher,但是不用插入其他符号,因为k是 ...

  2. 「Luogu P1435」回文字串 解题报告

    题面 主要大衣大意: 给定一个字符串,求至少加入多少个字符才能使字符串变成回文字符串 下面就是我一本正经的胡说八道题解 思路: 很显然,这应该是一道典型的最长公共子序列的题目 因此,主要思想就是DP ...

  3. 「Luogu P3866」[TJOI2009]战争游戏 解题报告

    题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...

  4. 「Luogu P2015」二叉苹果树 解题报告

    题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...

  5. 【九度OJ】题目1192:回文字符串 解题报告

    [九度OJ]题目1192:回文字符串 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1192 题目描述: 给出一个长度不超过1000的 ...

  6. Manacher【p1210】回文检测

    题目描述--->P1210 回文检测 分析: 看到回文显然想到了manacher算法(线性求解回文串问题 如果不了解还是去敲一下板子,学习一下比较好.-->manacher 题目要求我们求 ...

  7. Solution -「LOJ #141」回文子串 ||「模板」双向 PAM

    \(\mathcal{Description}\)   Link.   给定字符串 \(s\),处理 \(q\) 次操作: 在 \(s\) 前添加字符串: 在 \(s\) 后添加字符串: 求 \(s\ ...

  8. leetcode 214. 最短回文串 解题报告

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  9. 洛谷 P4555 [国家集训队]最长双回文串 解题报告

    P4555 [国家集训队]最长双回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为\(n\)的串 ...

随机推荐

  1. @loj - 2339@ 「WC2018」通道

    目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 11328 年,C 国的科学家们研发了一种高速传送通道,可以在很短的 ...

  2. uniapp APP端使用指纹

    使用插件指纹模板: https://ext.dcloud.net.cn/plugin?id=358 Fingerprint模块管理指纹识别 要使用指纹识别功能需要具备条件: 确认当前设备环境是否支持指 ...

  3. 让 AE 输出 MPEG

    最近在做视频后期处理,但是我发现 AE 的文件都很大,大概一个 10 分钟视频 10G ,所以有什么办法让他输出的文件变小?一个方法是使用 MPEG 输出. 本文告诉大家如何让 AE 输出 MPEG ...

  4. 容器服务kubernetes federation v2实践五:多集群流量调度

    概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...

  5. uniapp点击底部tabbar不跳转页面

    一个项目,其设想是这样的,当我进入页面,发现有新版本,提示用户之后,用户点击确定跳转到下载页面. 弹出框要用自己封装的,因为uniapp的弹出框不同的手机上展示的样子不一样,领导的是华为(在这里悄悄吐 ...

  6. PHP会话技术

    由于HTTP协议是无连接.无状态的,所以HTTP协议无法记住客户端的信息.为了弥补HTTP协议的这两种不足,所以出现了会话技术. 1 Cookie技术 1.1 什么是Cookie 服务器端,将能够唯一 ...

  7. jQuery的引入和使用

    https://www.cnblogs.com/sandraryan/ 前端代码优化:无效循环越少越好,DOM节点操作越少越好,HTTP请求越少越好 jq是一个js库.(不是框架) JQ优点 1. 方 ...

  8. oracle中 =: 和 := 分别是什么意思

    oracle中 =: 和 := 分别是什么意思 =:应该相当于 a = :b 表明b是个绑定变量,需要执行时进行变量绑定:= 相当于一般编程语言中的 赋值 a := 1 即将 数字1赋值给变量 a

  9. css模仿ipad的日历

    https://www.cnblogs.com/sandraryan/ 题外话之:最近的练习用js之类的写起来会简单点,但是为了巩固基础,只好html和css硬怼页面X﹏X 这是一个日历的代码 注释有 ...

  10. Server,Servlet,ServletConfig,ServletContext,Session,Request,Response

    Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...