当前位置: 首页 > news >正文

洛谷P4555 最长双回文串

P4555 [国家集训队] 最长双回文串

在这里插入图片描述

思路

写这个题主要是为了练习manacher算法,当然也有很多其他的方法可以做。
注意到题目要求找的是两个回文串拼起来,而manacher算法刚好能计算出以每个位置为中心的最长回文子串。
这种左右两边拼接的问题考虑枚举分断点。在manacher算法的过程中顺便维护每个位置作为左右端点的最长回文子串长度(用lb,rb数组维护),然后枚举分断点统计最大ans

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
#define int long long
#define pb push_back
#define pii pair<int, int>
#define FU(i, a, b) for (int i = (a); i <= (b); ++i)
#define FD(i, a, b) for (int i = (a); i >= (b); --i)
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int maxn = 3e5, MAXN = maxn;
string getns(string s) {string ns = "$#";for (int i = 0; i < s.size(); i++) {ns += s[i];ns += '#';}ns += '^';return ns;
}
int d[maxn];
int rb[maxn], lb[maxn];
void manacher(string s) {int l = 0, r = 0, ans = 0;for (int i = 1; i < s.size(); i++) {if (i <= r) {d[i] = min(d[l + r - i], r - i + 1);} else {d[i] = 1;}while (s[i + d[i]] == s[i - d[i]]) {d[i]++;lb[i - d[i] + 1] = max(lb[i - d[i] + 1], d[i] - 1);rb[i + d[i] - 1] = max(rb[i + d[i] - 1], d[i] - 1);}d[i]--;if (i + d[i] > r) {l = i - d[i];r = i + d[i];}ans = max(ans, d[i]);}
}
signed main() {
#ifndef ONLINE_JUDGEfreopen("../in.txt", "r", stdin);
#endifcin.tie(0)->ios::sync_with_stdio(0);string s;cin >> s;string ns = getns(s);manacher(ns);int ans = 0;// cout<<ns<<endl;FU(i, 0, ns.size()) {// cout<<lb[i]<<" "<<rb[i]<<endl;if (lb[i] != 0 && rb[i] != 0) // 注意不能是单边的情况ans = max(ans, lb[i] + rb[i]);}cout << ans << endl;return 0;
}

文章转载自:

http://mZw60suD.zwznz.cn
http://JA0cvhNp.zwznz.cn
http://soyU09fl.zwznz.cn
http://MpJs9rfK.zwznz.cn
http://DZBku6wG.zwznz.cn
http://s8BH8znq.zwznz.cn
http://DWOPiniX.zwznz.cn
http://bTnmOFIE.zwznz.cn
http://lKH3rkJ8.zwznz.cn
http://Q2EH6jXT.zwznz.cn
http://QH94y8Yt.zwznz.cn
http://xMAwldBk.zwznz.cn
http://FjJlivKJ.zwznz.cn
http://i33Jon6x.zwznz.cn
http://5FYdZeL1.zwznz.cn
http://7MMzzT6H.zwznz.cn
http://zerZIGbM.zwznz.cn
http://322ycMR0.zwznz.cn
http://HI1AUOTq.zwznz.cn
http://f1gpK6QU.zwznz.cn
http://iXKs7rfP.zwznz.cn
http://5688k4bx.zwznz.cn
http://sEx1SUTh.zwznz.cn
http://xhFmlOMe.zwznz.cn
http://3vdlodvg.zwznz.cn
http://yldyiaEq.zwznz.cn
http://sAvXdxWl.zwznz.cn
http://FcOCWGR6.zwznz.cn
http://nNHZAeLB.zwznz.cn
http://VW1sBPKl.zwznz.cn
http://www.dtcms.com/a/247244.html

相关文章:

  • 从监测滞后到全域智控:河湖智慧化管理方案
  • python程序设计(2)
  • LeetCode 72. 编辑距离(Edit Distance)| 动态规划详解
  • 【推荐算法课程二】推荐算法介绍-深度学习算法
  • 日语语法学习
  • 模型合并(model merge)
  • CC工具箱使用指南:【面要素四至】
  • 报表工具顶尖对决系列—关联过滤
  • /proc/<pid>/maps文件格式详解
  • 声学成像仪在电力行业的应用品牌推荐
  • JavaWeb期末速成 Servlet
  • [C++11] : 谈谈包装器和lambda表达式,仿函数,bind的坑
  • Ntfs!NtfsVolumeCheckpointDpc函数分析到调用Ntfs!NtfsCheckpointAllVolumes函数
  • ubuntu 挂载问题
  • 【51单片机】6. 定时器、按键切换流水灯时钟Demo
  • Harbor 2.12.2 and 2.12.3 初始化密码错误
  • 风控系统中,要调用第三方服务获取信息,很慢,如何解决?
  • Pytorch中view函数详解和工程实战示例
  • Vue + element实现电子围栏功能, 根据省市区选择围栏, 自定义围栏 ,手动输入地名围栏, 保存围栏,清除围栏,加载围栏,批量检测标点是否在围栏内。
  • 杭州电商代运营公司排名前十
  • 网络的那些事——初级——路由策略
  • FastDFS 分布式存储
  • Vue 3.6前瞻:响应式性能革命与Vapor模式展望
  • codeforces 2057D. Gifts Order
  • springboot3+mybatisplus(5)-backend-mybaitsplus+frontend-router
  • 7.8 Evaluating the finetuned LLM
  • Linux下OLLAMA安装卡住怎么办?
  • uni-app项目怎么实现多服务环境切换
  • LangChain--(1)
  • 如何将一个url地址打包成一个windows桌面版本的应用程序