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\),所以是可行的