npcapc_2024_d Two Box/【PR #15】黑白球染色
npcapc_2024_d Two Box/【PR #15】黑白球染色
题意
有 \(m\) 个球,一开始全部是白色。
有 \(n\) 次操作,每次操作可以把某个球的颜色反转。
有一个长度为 \(n\) 的要求序列 \(a_i\),\(a_i\) 表示第 \(i\) 次操作后编号 \(>a_i\) 的球必须是白色。
有 \(q\) 次修改,每次修改一个 \(a_i\),你要输出修改后有多少种操作序列满足要求序列。
\(n,q \le 3 \times 10^4, m \le 15\)。
原题题解翻译
D - 两个盒子 题解
- 部分分1 (\(N \leq 2000\),\(M \leq 10\),\(Q = 1\))
可以通过使用状态为 \(dp[i][j]\) 的二进制动态规划(bit DP)来解决这个问题,其中 \(dp[i][j]\) 表示进行 \(i\) 次操作后,黑盒子中球的状态为 \(j\)。时间复杂度为 \(\mathrm{O}(N2^MMQ)\)。
- 部分分2 (\(Q = 1\))
按照球 \(M,M - 1,\cdots,1\) 的顺序来确定它们的行为。对于球 \(k\) 而言,在大多数情况下,球 \(k\) 在其能存在于黑盒中的最大区间 \([l,r]\) 内被选择的次数为偶数次。这里所说的“大多数情况”是指,如果该区间在第 \(N\) 次操作后仍然包含在内,那么即使球 \(k\) 被选择奇数次也没问题。
在此,针对每个最大区间 \([l,r]\) 记录剩余操作次数,然后进行动态规划。状态转移方面,首先计算在 \([l,r]\) 中确定球 \(k + 1,k + 2,\cdots,M\) 的行为后剩余的操作次数。然后,如果该区间不包含整个区间的右端点,就进行使用偶数个球的状态转移。也就是说,对于数列 \(f_0,f_1,\cdots,f_d\),只需计算数列 \(g_i = \sum_{j \leq i,j = i \bmod 2} f_j \binom{j}{i}\) 即可。这可以利用卷积在 \(\mathrm{O}(d\log d)\) 的时间复杂度内计算出来。
请参考以下图表,这是 \(N = 6\),\(M = 3\),\(A = (1,3,2,2,3,1)\) 时的情况。例如,从下往上数第 \(3\) 层,考虑球 \(3\) 能存在于黑盒中的最大区间 \([2,3]\) 。由于对球 \(3\) 选择使用或不使用时,剩余操作次数分别为 \(0\) 和 \(2\),所以对应的多项式为 \(x^2 + 1\) 。
从下往上数第 \(2\) 层,考虑球 \(2\) 能存在于黑盒中的最大区间 \([2,6]\) 。在 \([2,6]\) 中确定球 \(3\) 的行为后,剩余操作次数的生成函数为 \((x^2+1) x (x^2 + 1) = x^5 + 2x^3 + x\) 。从这里进行使用偶数个球的状态转移后,结果为 \(x^5 + 12x^3 + 12x\) 。
需要注意的是,从下往上数第 \(1\) 层的最大区间 \([1,7]\) 包含右端点,所以操作次数为奇数也可以。

通过实现上述方法,可以在 \(\mathrm{O}(Q N M \log N \log \left(\frac{N}{M} \right))\) 的时间复杂度内解决该问题。
- 满分做法
考虑使用偶数个球的状态转移。对于生成函数 \(f(x)\) ,当考虑使用任意个球的情况时,令 \(g(x) = f(x + 1)\) 即可。要实现从这里进行使用偶数个球的状态转移,则令 \(g(x) = \frac{f(x + 1)+f(x - 1)}{2}\) 。不过,这样做时间复杂度并不会改变。
答案是最底层状态转移后的生成函数 \(f(x)\) 在 \(x = 1\) 处的值,即 \(f(1)\) 。因此,对于从下往上数第 \(k\) 层的生成函数,仅需记录 \(f(2 - k),f(3 - k),\cdots,f(k)\) 的值就可以进行状态转移。这样就能将一个区间所包含的信息量控制在 \(\mathrm{O}(M)\) 个。
考虑处理查询操作。由于第 \(k\) 层的区间依赖于第 \(k + 1\) 层的区间,所以在更新时需要从上层的区间开始更新。此时,通过合理处理最大区间,查询操作可以归结为对 \(\mathrm{O}(M)\) 个区间的删除和添加操作。首先,作为预处理,对于满足 \(1 \leq k \leq M\) 、\(2 - k \leq l \leq k\) 的 \((k,v)\) ,维护一棵线段树来管理从下往上数第 \(k\) 层区间对应的 \(f(v)\)(运算定义为乘法)。
考虑添加操作。当添加第 \(k\) 层的区间 \([l,r]\) 时,先求出第 \(k + 1\) 层线段树中所有 \([l,r]\) 的值,利用 \(g(x) = \frac{f(x + 1)+f(x - 1)}{2}\) 进行状态转移,然后更新第 \(k\) 层的线段树即可。对于删除操作,直接删除第 \(k\) 层线段树中的 \(f(v)\) 就行。因此,每个查询可以在 \(\mathrm{O}(M^2 \log N)\) 的时间复杂度内处理完毕。
通过上述方法,可以在 \(\mathrm{O}((N + Q)M^2 \log N)\) 的时间复杂度内解决这个问题。
npcapc_2024_d Two Box/【PR #15】黑白球染色的更多相关文章
- C#之桶中取黑白球问题
<编程之美>284页,问题4.6:桶中取黑白球. 有一个桶,里面有白球.黑球各100个,人们必须按照以下规则把球取出来: 1. 每次从桶中拿两个球: 2. 如果两球同色,再放入一个黑球: ...
- hdu5601-N*M bulbs(黑白棋盘染色)
一个矩形,一个人从左上角走到右下角,每走过一个位置把0变成1,1变成0. 求有没有可能他离开之后所有的数都是0 假设这个矩形是一个棋盘,黑白相间. 这样会发现从一个颜色走到相同颜色可以对棋盘不产生任何 ...
- bzoj 1324 Exca王者之剑(黑白染色,最小割)
[题意] 两相邻点不能同时选,选一个点集使得权值和最大. 出题人语文好... [思路] 将图进行黑白二染色,然后构建最小割模型. [代码] #include<set> #include&l ...
- 【Gym 100015B】Ball Painting(DP染色)
题 There are 2N white balls on a table in two rows, making a nice 2-by-N rectangle. Jon has a big pai ...
- P1330 封锁阳光大学[搜索+染色]
题目来源:洛谷 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图 ...
- GIL-Guilds(黑白灰染色)
传送门门门门门咩咩咩咩咩咩咩咩咩咩咩咩 \(这题真是扯谈!!!\) \(灰色很高级是吧,但是题目没要你把颜色全部用上去啊!!!\) \(黑色或者白色只有一个条件,但灰色需要和所有三种颜色都相邻.这么难 ...
- [SinGuLaRiTy] 组合数学题目复习
[SinGuLaRiTy] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 2011] 计算系数 题目描述 给定一个多项式( ...
- Python机器学习笔记:朴素贝叶斯算法
朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...
- NOI题库--盒子和小球系列 By cellur925
题目传送门 盒子和小球之二:N个有差别的盒子(1<=N<=20).你有A个红球和B个蓝球.0 <= A <= 15, 0 <= B <= 15.球除了颜色没有任何区 ...
- AtCoder Grand Contest 013D: Piling Up 题解
题意简化: [luogu] Piling Up 一开始有n个颜色为黑白的球,但不知道黑白色分别有多少,m次操作,每次先拿出一个球,再放入黑白球各一个,再拿出一个球,最后拿出的球按顺序排列会形成一个颜色 ...
随机推荐
- ccs 各种居中
转 http://www.cnblogs.com/2050/p/3392803.html 居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技 ...
- robots.txt 简单解析
简介 robots.txt 是一个规范,对于执行正常操作的爬虫理应遵守的规范. 例子 博客园例子 https://www.cnblogs.com/robots.txt User-Agent: * Al ...
- 关于人脸检测python库 dlib 初识 1
简介 上了一门计算机视觉的课程,初步了解, dlib python库 参考链接 http://dlib.net/face_detector.py.html 人脸检测的链接 原理 This face d ...
- 前端项目中的需求 pdf 转 svg
简介 通过 工具 inskcape 参考链接 https://zhuanlan.zhihu.com/p/144722704
- ETL工具怎么实现多流SQL实时运算?
多流SQL实时运算的特点和应用场景 多流SQL实时运算是一种先进的数据处理技术,它在大数据处理领域中扮演着至关重要的角色,尤其是在需要对多个数据流进行实时分析和处理的应用场景中.该技术结合了SQL(结 ...
- iPaaS生成数据库接口只要60秒?
"iPaaS生成数据库接口只要60秒?" 关于"iPaaS生成数据库接口只要60秒?"的说法,这实际上反映了iPaaS解决方案的一个重要优势:高效率.确实,借助 ...
- SciTech-Mathmatics - Advanced Linear Algebra(高等线性代数): 总结: Space的 变换 与 运算 + 正交向量 与 正交矩阵 + 同空间任两个Vectors可通过Matrix变换互相转化 + 方阵(满秩)不改变向量维数
SciTech-Mathmatics - Advanced Linear Algebra(高等线性代数): 总结: Space的 变换 与 运算 + 同空间任两个Vectors可通过Matrix变换互 ...
- SciTech-EECS-Circuits-Digital(数字电路): 全数字控制 AC-DC(开关电源) 或 DC-AC(逆变) 应用之: "DC-AC逆变器" 和 "2000A驱动板(正弦波+大功率IGBT)" + "逆变直流电焊机"
SciTech-EECS-Circuits-Digital(数字电路): 全数字控制的 AC-DC(开关电源) 或 DC-AC(逆变) 应用之: "DC-AC逆变器" 和 &quo ...
- Win11系统中如何连接打印机的问题
说到打印机是很多电脑基地用户在办公时都经常需要使用的设备,而且现在很多家庭里面有小孩上学以后都需要打印机来打印作业,但是普通的打印机需要和电脑连接才能使用.很多小伙伴升级win11系统之后,就不知道该 ...
- 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(6)-添加心跳灯
SBC-T113产品特性: 采用Allwinner公司Cortex-A7双核T113-i处理器,运行最高速度为1.2GHZ: 内置64-bit XuanTie C906 RISC-V协处理器: 支持J ...