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

NOIP2020 T2

给定长度为 \(n(1 \le n \le 2^{20})\) 的字符串 \(s\),问有多少种合法的拆分方式?一种合法的拆分方式:

  • \(s = (AB)^iC(i > 0)\)其中 \(A,B,C\) 为非空字符串,\((AB)^i\)\(i\)\(AB\) 拼接的结果。
  • \(F(A) \le F(B)\) \(F(s)\) 表示 \(s\) 中出现奇数次的字符数。

先忽略第二个条件。显然可以把 \(AB\) 看成一个整体(题目给了很强的提示),枚举 \(AB\) 的长度 \(len\),用 hash 判断每个 \(i\) 是否可行。

由调和级数可知,至多由 \(n \log n\)\(i\)。每个 \(i\)\(len - 1\) 种选法。

接下来考虑第二个条件,可以预处理出 \(s\) 有段后缀的 \(F_i\) ,然后将长度为 \(1 \sim len - 1\)\(F\) 丢到数组里(表示 \(A\) 的选法),查询 \(F_{i\cdot len + 1}\) 对应的贡献即可。

因为 \(F \le 26\),直接暴力加贡献即可。(否则还要个树状数组,时间复杂度是 \(O( n\log n\log26)\))。

时间复杂度:\(O(n (\log n + 26))\)

注意下常数能过,似乎有 \(O(n)\) 的扩展 KMP 做法。

http://www.rkmt.cn/news/23223.html

相关文章:

  • Alex-VGG3
  • 操作系统应用构建(十二)RustDesk 用户服务器搭建——东方仙盟筑基期
  • 10/17
  • NOIP2021 T2
  • 从零开始实现简易版Netty(九) MyNetty 实现池化内存的线程本地缓存
  • ubuntu 主机创建虚拟 ip,应对容器内部配置了宿主固定 ip,宿主迁移网络环境后容器报错
  • 2025权威报告:微信编辑器排版Top 10工具推荐(全链路解决方案)
  • 洛谷 P10149
  • ubuntu配置vsftpd
  • 时序数据库 Apache IoTDB 等你“打卡”!2025 OSCAR 开源产业大会完整版议程揭晓
  • 洛谷 P12865
  • ubuntu清理内存缓存
  • 单线程如何撑起百万连接?I/O多路复用:现代网络架构的基石
  • 10.17 CSP-S模拟33 改题记录
  • 包装类(基本数据类型对应的引用数据类型)
  • 系统稳定性监控
  • 详细介绍:k8s部署前后分离架构微服务——跨域和缓存问题
  • npm镜像配置
  • 一些特性
  • AGC 板刷记录1
  • 2025.10.17总结
  • 记Windows 11环境Rust下载安装配置流程
  • K8s学习笔记(九) job与cronjob - 教程
  • [PaperReading] VLM2Vec-V2: Advancing Multimodal Embedding for Videos, Images, and Visual Documents
  • 标悬浮展开多级菜单
  • 深入解析Pure恶意软件家族:从RAT到构建器再到开发者
  • 3. JVM 运行时数据区
  • 软工学习日志
  • 修电脑不求人:AI智能修复电脑工具的体验分享
  • Xcode上编译调试ffmpeg - 详解