CF2172B Buses
首先我们可以转换参考系,以公交车为参考系,问题变成一个追及问题,容易发现最优策略是人不断往终点走,遇到公交车就坐上
画 \(s-t\) 图(\(s\) 为到终点的距离),那么每辆公交车的速度为 \(0\),相当于一条平行于 \(x\) 轴的线段,终点的运动图像为一条斜率为 \(x\),过原点的直线
考虑人的图像,\(y\) 轴截矩是 \(L - p\),斜率是 \(x - y\),那么,每当这条直线与一条线段相交时,就会沿线段走到末端,再继续上升,直到与 \(s = xt\) 相交,这样就可以递推
所以,我们就要求两个东西:与 \(s - s_0 = (x-y)(t - t_0)\) 相交的纵坐标最小的线段(公交车),以及直线与 \(s = xt\) 的交点
第二个是好求的,来看第一个
设满足条件的线段右端点为 \((a, b)\)
那么,该线段一定高于直线的出发点,即 \(b \ge s_0\)
并且,要有交点,即 \((x-y)(a - t_0) + s_0 \ge b\),移项同构,得 \((x-y)a - b \ge (x-y)t_0 - s_0\)
将每辆公交车对应的线段按纵坐标从达到小排序,\(L_i = (t_i, s_i)\),为线段右端点,记 \(f(i) = (x - y)t_i - s_i\)
那么上述条件等价于求满足 \(j < i, f(j) \ge f(i)\) 的最大的 \(j\),这个可以用单调栈做
于是就可以愉快地递推解决了
CF2171E Anisphia Wynn Palettia and Good Permutations
首先,看到互质,先考虑奇偶性,所以我们考虑让每三个数里面都有两个偶数,即构成
奇 偶 偶 奇 偶 偶 奇 ......
的结构
但是,很容易发现偶数是不够用的,那么具体不够用到什么程度呢?我们可以粗略估计一下
每两个偶数都可以带上一个奇数,所以总共能够带上 \(n / 4\) 个奇数,还有剩下 \(n / 4\) 个数留在末尾
所以,问题在于中间两个数不太够用,这时我们想到,可以寻找偶数的替代品,其实,只要中间两个数有公因数即可,所以可以利用 \(3\) 的倍数。
那么,我们现在可以利用的数就是 \(3\) 的倍数或偶数,这样的数共有约 \(\frac{2}{3}n\) 个,根据上面的分析,一共能带上约 \(n/3\) 个除此之外的数,这样就够了
题目中所说的 \(6\) 个容错位置主要就是给不能刚好匹配够,以及 偶数 与 三的倍数 交界的地方
CF2165C Binary Wine
首先容易发现,每个 \(b_i\) 两两之间一定没有重复的位,这样肯定更优
所以现在就是要把 \(c\) 的每一位分配到一个 \(a_i\) 上,使得总代价最小
首先从大到小考虑有值的位,那么肯定选择最大的数分配给它,这个可以根据邻项交换证明,然后分配后就变成了一个 \(c\) 更小,\(a\) 不同的子问题
那么用优先队列实现就可以了