尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P9753 [CSP-S 2023] 消消乐

P9753 [CSP-S 2023] 消消乐
📅 发布时间:2026/6/19 3:07:14

前置算法

  1. 动态规划
  2. hash哈希

题目大意

给定一个字符串,可以将相邻两个相同的字符删除,然后合并成一个新序列。

例如:abba,可以先将两个 b 删除,然后合并成 aa,最后删除 a。

求出有多少个字串,最后可以将其变为空串,我们称之为合法的字串。

思路

看到数据范围,只能使用 \(O(n)\) 及以下的时间复杂度来解决这道问题。

思考他的性质,显然如果 [a, b] 和 [b + 1, c] 是一个合法的字串,则 [a, c]。

求解 f[] 数组

考虑动态规划,设 \(f[i]\) 表示以第 \(i\) 个字符为结尾的合法字串有多少个,则 \(f[i] = f[x-1] + 1\),其中 \(x\) 为最大的一个合法区间的左端点。

求解 x[] 数组

可以看到,\(s[x]\) 一定等于 \(s[i]\),并且 [x + 1, i - 1] 一定也是一个合法字串,从而得到 \(x[i] = x[i-1] - 1\),直到 \(s[x[i]] = s[i]\),找不到则等于 \(i\)。

优化

可以发现求解 x[] 的过程比较慢,考虑下面一张图,是求解 x[] 的过程图

无标题

因为每次 x[i] 总是回调到 x[i-1] - 1,所以令 t[i-1] = x[i-1] - 1,则每次 x[i] 只要跳到 t[i-1] 即可

有标题

现在可以将他看成几条链,每一条链的编号为链头,用 \(to[i]\) 表示 \(i\) 所在的链的编号即对头是多少,用 \(a[id][c]\) 表示链编号为 \(id\) 的链上,最近的一个字符 \(c\) 的位置,没有则为 \(0\)。

这样就可以在 \(O(n)\) 的时间复杂度内解决这道题。

代码

#include <iostream>
using namespace std;const int N = 2000010;
long long n, dp[N], to[N], a[N][40];
string s;int main() {cin >> n >> s;s = " " + s;for (int i = 1; i <= n; i++) {to[i] = i; // 将链头赋值为 iint x = a[to[i-1]][s[i] - 'a' + 1]; // 找到最近的一个合法左端点if (x) to[i] = to[x-1], dp[i] = dp[x-1] + 1; // 更新dp值a[to[i]][s[i] - 'a' + 1] = i; // 更新 a 数组}long long ans = 0; // 不开 long long 见祖宗for (int i = 1; i <= n; i++)ans += dp[i];cout << ans << endl;return 0;
}

完结撒花!!!

相关新闻

  • Jenkins CVE-2018-1000600漏洞利用与SSRF攻击分析
  • 详细介绍:Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
  • 深入解析:PYcharm——pyqt音乐播放器

最新新闻

  • Mac百度网盘下载加速终极方案:三分钟实现SVIP级下载体验
  • 分布式黎曼优化算法在非欧数据中的应用与实现
  • 音乐歌词管理的新范式:163MusicLyrics如何重塑你的音乐体验
  • 黄金暴涨:虚拟时代的原始信仰
  • 如何用免费在线工具深度分析无人机飞行日志:UAV Log Viewer完全指南
  • 炉石传说终极插件指南:如何用HsMod快速提升游戏体验

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号