题解 Codeforces Round #678 (Div. 2) (CF1436)
Posted kylin-xy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 Codeforces Round #678 (Div. 2) (CF1436)相关的知识,希望对你有一定的参考价值。
A Reorder
观察样例解释易知我们需要判断总和是否为 (m) 的倍数。注意特判 (n=0,m eq 0) 和 (m=0,sum eq 0) 的情况。
B Prime Square
(n) 是偶数就把两个对角线填上 (1) ,这样每行每列的和都是 (2) 。
(n) 是奇数就把正中间的一行一列改成中间都是 (0) 边界是 (1) ,以 (n=5) 为例:
C Binary Search
按照它的二分过程做,(a[mid]<=x) 等价于 (mid<=pos) ,这样就可以算出钦定了 (a) 个位置必须比 (x) 大,(b) 个位置必须比 (x) 小,(n-1-a-b) 个位置可以随便填。于是序列方案就是:
直接预处理阶乘和阶乘逆元就行。注意判断 (x-1-a,n-x-b) 是否是负数,如果是负数直接输出 (0) 。
D Bandit in a City
只能向叶子走意味着每个点的权值只能转移到它子树内所有的叶子节点里,我们只要记录每棵子树的权值和 (sum_x) 以及叶子节点个数 (sz_x) ,市民采取的最优方案一定是平均,而歹徒采取的最优方案一定是选最大的叶子,所以 (ans=max{lceil frac{sum_x}{sz_x} ceil}) 。注意 (sum_x=0) 时上取整要特判。
E Complicated Computations
求所有子序列的 ( extsf{mex}) 的 ( extsf{mex}) ,发现 (a_i) 的范围不大,同时意识到 ( extsf{mex}) 不会超过 (max{a_i}+1) ,考虑枚举答案 ( extsf{mex} =x) 。如何检查没有一个子序列的 ( extsf{mex}=x) 且所有子序列最大 ( extsf{mex}=x-1) ?考虑把 (x) 的出现位置记录下来,假设是 (p_1,p_2,dots,p_k) ,我们只需要检查 ([1,p_1],[p_1,p_2],[p_2,p_3],dots,[p_{k-1},p_k],[p_k,n]) 这些段的 ( extsf{mex}) 即可,这个很容易用线段树或者树状数组维护。每次如果 (x) 不是答案就把刚刚检查的区间的 (x) 标记为出现过,这个可以直接用取最大值的方式维护,如果 (x) 是答案就直接输出。
F Sum Over Subsets
前五题是昨晚写的,有一题 fst 了不过早上起来已经加了个特判改过了。F是早上补的,可惜CF评测队列太长了,暂时不知道我过没过,先鸽着,如果做法是对的就来更。
以上是关于题解 Codeforces Round #678 (Div. 2) (CF1436)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #815 (Div. 2) 题解
Codeforces Round #805 (Div. 3) 题解
Codeforces Educational Codeforces Round 54 题解
Codeforces Round #637 (Div. 2) 题解