CF1352F Binary String Reconstruction
简单构造,不讲
CF1392D Omkar and Bed Wars
其实本来我是写了一份dp代码,然后今天咸的往下翻了翻,突然发现第3篇的代码很短,于是重写了一遍此题
破环成链,先找到所有连续的相同字符组成的组(比如 RRR、LL 等)。
因为环首尾相连,如果首尾字符相同,就把第一组和最后一组合并成一组。
每组长度记为 \(len\)。在这组里,每连续 3 个相同字符,中间那个人必须改变方向。所以该组最少需要改 \(\lfloor len / 3 \rfloor\) 个人。
特别地,如果整个环全是同一个字符(比如全是 R),那么答案是 \(\lceil n / 3 \rceil\),等价于 \((n+2)/3\)。否则,答案就是所有组 \(\lfloor len / 3 \rfloor\) 之和。
CF1336B Xenia and Colorful Gems
给定三个多重集 \(R, G, B \subseteq \mathbb{N}^+\),大小分别为 \(n_r, n_g, n_b\)。
求
\[\min_{x \in R,\ y \in G,\ z \in B} \left( (x-y)^2 + (y-z)^2 + (z-x)^2 \right)。
\]
将三个数组分别升序排序,枚举中间值所在的数组(共 \(3\) 种),对于该数组的每个元素 \(x\),在另外两个数组中分别二分查找 小于等于 \(x\) 的最大值(前驱)和大于等于 \(x\) 的最小值(后继)
- 将找到的两个数 \(y, z\) 与 \(x\) 组合,计算 \(\text{cal}(x,y,z)\) 并更新答案。
- 由于中间值的“左右”顺序不确定,需要枚举所有 \(3! = 6\) 种排列(即谁做中间、谁做左、谁做右),每种排列均调用上述过程。
注意!!!答案可能超过1e18!!要换成0xff!!
