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

CF1995D Cases

CF1995D Cases

题意:

给定一个长为 \(n\),字符集大小 \(c=18\) 的字符串,给定一个整数 \(m\) ,你需要求出一个字符集合 \(S\) 满足在原串中每 \(m\) 个字符中至少有一个被包含在集合 \(S\) 中。

其中 \(m\le n\le 2^{18}=262144\)

思路:

最暴力的想法:\(dp_{i,S}\) 表示已钦定 \(S\) 内的点都选取,当前推到了字符串的第 \(i\) 位,是否可行。时间复杂度 \(O(n2^{18})\) 。进一步找性质发现对于一个位置 \(i\) ,只会往后转移 \(c\) 个位置,所以我们能否尝试根据这个性质 bitset 优化?显然无法操作,因为一是无法分割 bitset 成若干位置,二是 \(n\) 过大导致 bitset 时间复杂度无法接受。

更换思路,我们考虑什么样的 \(S\) 是一定无法成立的。可以发现,若连续 \(k\) 个字符所形成的字符集 \(T\) 满足 \(T\cap S=\empty\) ,一定无法成立。但是我们这样的 \(T\) 的数量 \(=n-k+1\) ,暴力判断仍然不行,因为这样的 \(S\) 之间没有相关性,即无法相互推导(考虑到两个不相等的集合 \(S_1,S_2\cap T=0\),他们形成的并集也一定与 \(T\) 的交集为空)。考虑优化。直接找到满足这种性质的 \(S\) 显然不好找,由于 \(T\cap S=\empty\) ,所以 \(T\cap \overline{S}=T\) ,并且对于任意字符 \(c\notin \overline{S} ,(\{c\}\cup\overline S)\cap T=T\),所以我们不妨尝试寻找这样的 \(\overline{S}\)

这是简单的,先标记所有的 \(dp_T=1\) ,然后按照上面的性质以此遍历所有的集合。

http://www.gsyq.cn/news/12533.html

相关文章:

  • 《etcd库——键值存储系统》 - 教程
  • 深度学习周报(9.15~9.21) - 实践
  • 2025.9.26总结 - A
  • 深入解析:盟接之桥EDI软件:中国制造全球化进程中的连接挑战与路径探索
  • 搜维尔科技:Force Dimension Omega力反馈设备遥操作工业机器人
  • C++程序练习(部分未完全完成)
  • C#性能优化基础:垃圾回收机制
  • 安装python解释器 - Jun
  • 深入解析MySQL InnoDB锁机制 - 教程
  • 【A】杂题选将
  • Django 搭配数据库开发智慧园区系统全攻略 - 详解
  • 客服系统源码二次开发
  • PostgreSQL 和 MySQL两个数据库的索引的区别 - 详解
  • Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量 - 教程
  • 2025权威排行榜:公众号编辑器Top 6深度测评,哪款最适合你
  • 在Debian系统上修改开源软件源代码制作patch - 教程
  • 需求的系统规划 3
  • 区别:Modbus RTU 和 Modbus TCP
  • python组合类型和组合可空类型
  • 数学草稿
  • vue3 + vite Cannot access ‘xxx‘ before initialization
  • 华米运动步数修改,每天自动修改并同步 微信运动/支付宝运动 步数
  • C++ placement new
  • Spring Boot接入邮箱,完成邮箱验证码
  • HyperWorks许可与网络安全
  • 研发项目管理系统哪个好?十款热门工具全面测评
  • L4 vs L7 负载均衡:彻底理解、对比与实战指南 - 实践
  • 你好 博客园!
  • 2025无人机林业行业场景解决方案
  • 实用指南:Spring Boot集群 集成Nginx配置:负载均衡+静态资源分离实战