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】黑白球染色的更多相关文章

  1. C#之桶中取黑白球问题

    <编程之美>284页,问题4.6:桶中取黑白球. 有一个桶,里面有白球.黑球各100个,人们必须按照以下规则把球取出来: 1. 每次从桶中拿两个球: 2. 如果两球同色,再放入一个黑球: ...

  2. hdu5601-N*M bulbs(黑白棋盘染色)

    一个矩形,一个人从左上角走到右下角,每走过一个位置把0变成1,1变成0. 求有没有可能他离开之后所有的数都是0 假设这个矩形是一个棋盘,黑白相间. 这样会发现从一个颜色走到相同颜色可以对棋盘不产生任何 ...

  3. bzoj 1324 Exca王者之剑(黑白染色,最小割)

    [题意] 两相邻点不能同时选,选一个点集使得权值和最大. 出题人语文好... [思路] 将图进行黑白二染色,然后构建最小割模型. [代码] #include<set> #include&l ...

  4. 【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 ...

  5. P1330 封锁阳光大学[搜索+染色]

    题目来源:洛谷 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图 ...

  6. GIL-Guilds(黑白灰染色)

    传送门门门门门咩咩咩咩咩咩咩咩咩咩咩咩 \(这题真是扯谈!!!\) \(灰色很高级是吧,但是题目没要你把颜色全部用上去啊!!!\) \(黑色或者白色只有一个条件,但灰色需要和所有三种颜色都相邻.这么难 ...

  7. [SinGuLaRiTy] 组合数学题目复习

    [SinGuLaRiTy] Copyright (c) SinGuLaRiTy 2017.  All Rights Reserved. [CQBZOJ 2011] 计算系数 题目描述 给定一个多项式( ...

  8. Python机器学习笔记:朴素贝叶斯算法

    朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...

  9. NOI题库--盒子和小球系列 By cellur925

    题目传送门 盒子和小球之二:N个有差别的盒子(1<=N<=20).你有A个红球和B个蓝球.0 <= A <= 15, 0 <= B <= 15.球除了颜色没有任何区 ...

  10. AtCoder Grand Contest 013D: Piling Up 题解

    题意简化: [luogu] Piling Up 一开始有n个颜色为黑白的球,但不知道黑白色分别有多少,m次操作,每次先拿出一个球,再放入黑白球各一个,再拿出一个球,最后拿出的球按顺序排列会形成一个颜色 ...

随机推荐

  1. ccs 各种居中

    转   http://www.cnblogs.com/2050/p/3392803.html 居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技 ...

  2. robots.txt 简单解析

    简介 robots.txt 是一个规范,对于执行正常操作的爬虫理应遵守的规范. 例子 博客园例子 https://www.cnblogs.com/robots.txt User-Agent: * Al ...

  3. 关于人脸检测python库 dlib 初识 1

    简介 上了一门计算机视觉的课程,初步了解, dlib python库 参考链接 http://dlib.net/face_detector.py.html 人脸检测的链接 原理 This face d ...

  4. 前端项目中的需求 pdf 转 svg

    简介 通过 工具 inskcape 参考链接 https://zhuanlan.zhihu.com/p/144722704

  5. ETL工具怎么实现多流SQL实时运算?

    多流SQL实时运算的特点和应用场景 多流SQL实时运算是一种先进的数据处理技术,它在大数据处理领域中扮演着至关重要的角色,尤其是在需要对多个数据流进行实时分析和处理的应用场景中.该技术结合了SQL(结 ...

  6. iPaaS生成数据库接口只要60秒?

    "iPaaS生成数据库接口只要60秒?" 关于"iPaaS生成数据库接口只要60秒?"的说法,这实际上反映了iPaaS解决方案的一个重要优势:高效率.确实,借助 ...

  7. SciTech-Mathmatics - Advanced Linear Algebra(高等线性代数): 总结: Space的 变换 与 运算 + 正交向量 与 正交矩阵 + 同空间任两个Vectors可通过Matrix变换互相转化 + 方阵(满秩)不改变向量维数

    SciTech-Mathmatics - Advanced Linear Algebra(高等线性代数): 总结: Space的 变换 与 运算 + 同空间任两个Vectors可通过Matrix变换互 ...

  8. SciTech-EECS-Circuits-Digital(数字电路): 全数字控制 AC-DC(开关电源) 或 DC-AC(逆变) 应用之: "DC-AC逆变器" 和 "2000A驱动板(正弦波+大功率IGBT)" + "逆变直流电焊机"

    SciTech-EECS-Circuits-Digital(数字电路): 全数字控制的 AC-DC(开关电源) 或 DC-AC(逆变) 应用之: "DC-AC逆变器" 和 &quo ...

  9. Win11系统中如何连接打印机的问题

    说到打印机是很多电脑基地用户在办公时都经常需要使用的设备,而且现在很多家庭里面有小孩上学以后都需要打印机来打印作业,但是普通的打印机需要和电脑连接才能使用.很多小伙伴升级win11系统之后,就不知道该 ...

  10. 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(6)-添加心跳灯

    SBC-T113产品特性: 采用Allwinner公司Cortex-A7双核T113-i处理器,运行最高速度为1.2GHZ: 内置64-bit XuanTie C906 RISC-V协处理器: 支持J ...