Codeforces Round 1049 (Div. 2) 部分题解

Codeforces Round 1049 (Div. 2) 部分题解

D. A Cruel Segment's Thesis

可以发现最后是选 \(\lfloor\frac{n}{2}\rfloor\) 对区间,一半取 \(r\) 一半取 \(l\) 配对相加。

那可以假定所有区间选 \(r\) 再选出 \(l+r\) 最优的一半区间合进去就可以了。

\(n\) 是奇数时,需要删掉一个区间不计入答案,我们枚举删除的区间是哪个,统计删除后的答案是容易的。

E. Prime Gaming

E1 可以用 dp,\(f_{n,s,0/1}\) 表示现在剩 \(n\) 个状态为 \(s\) 先后手走最终的剩余是什么。

现在考虑 E2,先考虑怎么确定一个序列的最终答案,考虑枚举这个答案,将小于其的设 \(0\) 大于等于的设 \(1\) ,若这个状态答案为 \(1\) 则答案大于等于这个值。

E2 可以枚举答案 \(k\) ,将序列大于等于 \(k\) 的设 \(1\) 小于 \(k\) 的设 \(0\) 就又转化成了 E1 的问题,于是可以统计出来最终答案大于等于 \(k\) 的序列个数,差分一下就是恰好等于 \(k\) 的序列个数,就可以相加了,复杂度 \(O(n2^n+nm)\)

bonus,求对于 \(m \leq 10^9\) ,每个数互不相同的答案。

求出 \(cnt[s]\) 表示多少个二进制序列最终答案为 \(1\),答案为:

\[\sum_{i=1}^m\sum_{r=1}^n \binom{i-1}{n-r}\binom{m-i+1}{r}cnt[r]\cdot r!(n-r)! \]

转化一下:

\[=\sum_{r=1}^n cnt[r]r!(n-r)!\sum_{i=1}^m\binom{i-1}{n-r}\binom{m-i+1}{r} \]

第二个和式的组合意义为:将 \(m\) 个数划分,左边选 \(n-r\) 个右边选 \(r\) 个,等价于 \(m\) 个数选 \(n-r+r\) 个,这个划分不完整(\(i=m\) 时不是全部左划分),去掉一种情况(其实这个边界答案就是 \(0\)),化简为:\(\binom{m}{n}\),得到答案:

\[=\sum_{r=1}^ncnt[r]r!(n-r)!\binom{m}{n} \]

F. Sum Minimisation

好有意思的题!

现在假设 \(a_i\) 是排好序的,则 \(a_1\) 视为最小值。

\(k=2\) 考虑,可以发现若 \(a_{2,\cdots,n}\) 中出现奇偶不同的两个数,则可以无限操作减小 \(a_1\)

引理:对于 \(2 \leq k \leq n-1\) ,若序列中存在两个数 \(a_i \not\equiv a_j \pmod k\) ,则任意选择 \(k\) 个数只包含 \(a_i\) 不包含 \(a_j\) ,总可以调整 \(a_i,a_j\) 使得选出的 \(k\) 个数和不是 \(k\) 的倍数,即可以操作。

上文 \(k=2\) 的条件很强,这表明 \(a_{2, \cdots,n}\) 奇偶性完全一致,如果存在一个操作 \([2,n]\) 中某个数的操作,就可使得奇偶不同,转化成上文情况。由引理得,对于 \(k=[2,n-2]\)\(a_{2,\cdots,n}\) 中存在两个数模 \(k\) 不同则存在一种这样的操作,又可以无限操作。或者说,\(\sum_{i=2}^n a_i \not\equiv 0 \pmod{n-1}\) ,则也存在一个合法操作。

若上述操作都不满足,即对于 \(k=[2,n-2]\)\(a_i\)\(k\) 完全相同,且 \(\sum_{i=2} a_i\)\(n-1\) 的倍数,此时需要借助 \(a_1\)

后面为方便,所有 \(a_i\)\(a_{2,\cdots,n}\) 中的数。

\(k = [2,n-2]\) ,检查 \(a_1\)\(a_i\)\(k\) 意义下的差别(此时随意选 \(k\)\(a_i\) 和一定是 \(k\) 的倍数),记 \(a_1-a_i \equiv w \pmod k\)

  • \(w=0\) ,则没有什么用。
  • \(w=1\) ,替换 \(a_1\) 后可以对 \(a_1\) 减一。
  • 否则,替换 \(a_1\) 后能对 \(a_i\) 减一。

同时对于 \(\sum_{i=1}^n a_i\)\(n\) 同样做上述判断,对于 \(k=n-1\) 也要做一个特判,因为上述检查只保证了 \(k=[2,n-2]\) 下互相同余,下文合并三个讨论:

  • 最后一种情况,又回到最开始,能无限进行。
  • 若全部都没有用,即差距全是 \(0\) ,那怎么操作都不行,答案就是现在的序列和。
  • 存在 \(k=1\) 的情况,此时存在一个操作使得 \(a_1\) 减一。

对于最后的情况,我们操作一次 \(a_1\) ,然后继续执行这个判断,直到出现答案。

这个判断最多重复执行一次,也就是说答案只能是 \(\sum a_i,\sum a_i -1,-1\) 三者。

为什么,考虑若我需要第二次判断,则情况为所有差距都是 \(0\)\(1\) ,在 \(a_1\) 减一后,差距为 \(1\) 的变成 \(0\) 了不能继续操作,差距 \(0\) 的在模下变为 \(-1\) ,而对于 \(k \geq 3\) ,这个值必然大于 \(1\) ,也就是下次检查必然会终止。对于 \(n=2\) 也是成立的,此时执行完后必然差距全是 \(0\)

现在考虑判断 \(a_{2,\cdots,n}\)\(k=[2,n-2]\) 完全一致,可以写出同余方程:

\[\begin{align*} x &\equiv a_2 \pmod 2 \\ x &\equiv a_2 \pmod 3 \\ &...\\ x &\equiv a_2 \pmod{n-2} \end{align*}\]

通解是 \(x\equiv x_0 \pmod{\operatorname{lcm}(2,3,\cdots,n-2)}\)

\(x_0\) 不重要,关键是 \(a_i\)\(\operatorname{lcm}\) 下完全一致,在 \(n\) 很大时,公倍数很大,不会造成取余,此时 \(\operatorname{lcm}\) 设一个比较大的值就可以。

code

posted @ 2025-09-10 13:05  蒻蒻虫  阅读(156)  评论(0)    收藏  举报