加载中...

cf Global Round 31 CDE

很早就听说了这场题出得比较逆天,体验了一下发现还真是。被 CD 这两个题虐爆了qwq。。。E 题看着也挺不错的,遂来补题。

C. XOR-factorization

\(k\) 为奇数时显然全填 \(n\) 最优。考虑 \(k\) 为偶数时的情况:

一个特别容易错的贪心:填 \(k-2\)\(n\),剩下两个数分别为 \(a, b\),并最大化满足 \(a \oplus b = n\),且 \(a \leq n, b \leq n\) 的两个数 \(a, b\) 之和。这样做的错误在于:没有贪心地使得高位 \(1\) 的数量最大化。

正确的贪心做法应该是:对于所有数,需要按照高位到低位的顺序,每次填某个固定二进制位上的数字,并最大化该位填 \(1\) 的数量。需要注意的是值域为 \([0, n]\),因此某个数的高位填 \(1\) 时注意不能填冒。同时,我们还需要对每个数维护一个 \(bool\) 变量 \(free_{i}\),表示该数当前位是否能随便填数字(当该数的某一高位是 \(0\),而 \(n\) 上相应位是 \(1\) 时为 true,表示后面无论怎么填数字,大小都不会超过 \(n\))。具体实现:假设当前在填高 \(c\) 位,前面的高位都已填完:

  • \(n\) 在该位上的数字是 \(1\),则可以确定该位上填 \(1\) 的数字数量是 \(k-1\),因为此时的值域限制没有用,尽可能地填 \(1\) 是最优的。而唯一的 \(1\)\(0\),应当贪心地分配给 \(free\) 值为 false 的数,使得其 \(free\) 值变为 true,这样更有利于后续操作
  • 否则,该位上填 \(1\) 的数量,应该是 \(\leq freecnt\) 的最大偶数。 往相应的 \(free\) 值为 true 的数上填 \(1\) 即可。

具体实现见代码。吐槽:这题作为 div1+2 的 C 题实在太超模了,1900分。。。

code

D. Insolvable Disks

考察贪心和不等式约束。这道题蒟蒻吭哧吭哧补了半天才补出来,官方题解也看不明白一点,感觉自己真的不擅长这种偏开放思维的题qwq。。。

对于 \(1 \leq i < n\),我们依次考虑第 \(i\) 个圆和第 \(i + 1\) 个圆是否能相切。二者能相切当且仅当二者半径之和等于二者之间的距离,而一个圆的半径取值范围只与它左右两个相邻圆的圆心位置和半径有关,因此我们考虑用 两侧的圆心位置左侧圆半径的取值范围 (从左向右递推,已计算完)去递推右侧圆的半径取值范围,并判断这两个圆是否能相切。若能相切则继续递推下一个圆;否则只能从这里断开,此时第 \(i + 1\) 个圆的半径取值范围就不再受第 \(i\) 个圆的半径影响,只与左右两个圆的圆心位置有关。重新计算该半径的取值范围并往后递推即可。

code1

这里再贴一下官方题解的思路,利用了一些不等式约束限制条件来推演,和上面的方法大体是差不多的,但上面的方法明显简单很多。

pZRumsU.png

code2

E. No Effect XOR

题意:给定区间 \([l, r]\),求满足 \(\forall i \in [l, r]\)\(i \oplus x \in [l, r]\) 的所有正整数 \(x\) 的数量,\(l, r \leq 10^{15}\)

等有时间再补。。。

code

posted @ 2026-01-27 00:00  jxs123  阅读(1)  评论(0)    收藏  举报