Codeforces Round 964 (Div. 4) 题解

A

模拟。

B

模拟,注意两张牌相等两方都没赢,这害我 \(-3\) 了。

C

计算出工作段之间的空隙最大值,注意到 \(m\) 的那段。

D

匹配子序列。如果遇到问号直接赋值为想要的那个。

E

注意到把 \(\times 3\) 的操作放在 \(0\) 上是比较优的,设 \(g_i\)\(i\) 要整除多少次 \(3\) 才能为 \(0\),显然 \(g_i\) 单调不减,所以我们优先选 \(l\) 进行整除 \(3\) 的操作,多出来的 \(\times 3\) 需要 \(g_l\) 次消掉,那么答案为 \(\sum_{i=l}^rg_i+g_l\),这样复杂度是 \(O(tn)\) 的,预处理出 \(g\) 的前缀和即可。

F

注意到中位数只可能是 \(0,1\) 我们考虑算出 \(1\) 的贡献。

假设子序列 \(1\) 的个数为 \(c_1\),那么一个子序列有贡献当且仅当 \(c_1\ge\lceil\dfrac{k}{2}\rceil\),考虑枚举 \(1\) 的个数。

假设 \(1\) 的个数为 \(x\),则贡献为 \({c_1\choose x}{n-c_1\choose k-x}\),其中 \(c_1\)\(1\) 的个数。那么答案为 \(\sum_{i=\lceil\frac{k}{2}\rceil}^k{c_1\choose i}{n-c_1\choose k-i}\)

G1

注意到 \(log_2999<10\),那么我们可以令 \(a=1\)\(b\) 直接二分即可。

G2

没能有时间做出来,我先口糊一下。

设答案区间为 \([l,r]\),我们令 \(a,b\) 分别为 \([l,r]\) 的三等分点且 \(a<b\),考虑 \(x\) 在哪段区间

  • 若返回的 \(x=(a+1)(b+1)\),那么答案在 \([l,a]\)

  • 若返回的 \(x=a(b+1)\),那么答案在 \([a,b]\)

  • 若返回的 \(x=ab\),那么答案在 \([b,r]\)

因为 \(log_3999<7\),所以是可行的

posted @ 2024-08-07 01:30  123wwm  阅读(263)  评论(0)    收藏  举报