CF1877 Div2 A-E 题解

发布时间 2023-10-09 10:45:27作者: TKXZ133

A

显然 \(n\) 个队的得分之和为 \(0\),因此答案为这 \(n-1\) 个数的和的相反数。

赛时代码

B

小贪心。

将所有人按 \(b\) 升序排序,\(b\) 相同时按 \(a\) 降序,对每个人按 \(b\) 进行分类讨论:

  • \(b< p\),那么我们一定要选这个人,因为选了这个人我们就可以用当前最小的代价去选其他的人。

  • \(b\ge p\),那么直接用 \(p\) 的代价选这个人就可以。

还要注意一些边界之类的东西,细节还是有的。

赛时代码

C

细节题。

我们可以看一下当 \(n=3,m=9\) 时的情况:

\[\begin{aligned} 0\ 0\ 0\ 0\\ 0\ 1\ 1\ 1\\ 0\ 0\ 2\ 2\\ 0\ 0\ 0\ 3\\ 0\ 1\ 1\ 4\\ 0\ 0\ 2\ 5\\ 0\ 0\ 0\ 6\\ 0\ 1\ 1\ 7\\ 0\ 0\ 2\ 8\\ 0\ 0\ 0\ 9\\ \end{aligned}\]

不难发现规律:

  • \(k>3\) 时,无解。

  • \(k=1\) 时,有且只有一组解,即全 \(0\) 序列。

  • \(k=2\) 时,有 \(\min(n,m)+\max(0,\lfloor\frac{m}{n}\rfloor -1)\) 组解。

  • \(k=3\) 时,有 \(\max(0,m-n-\lfloor\frac{m}{n}\rfloor+1)\) 组解。

赛时代码

D

简单题。

我们只需要计算对于每个值,它作为最大值出现在了几个方案中即可,产生的贡献就是方案数与其值的乘积。

我们将序列降序排序,按值从大到小考虑,设当前考虑的值为 \(x\),对应的下标为 \(y\)

因为我们需要强制钦定 \(x\) 为最大值,这就意味着比 \(x\) 大的值都不能选,又因为只要选了一个位置,其倍数都会被选,所以这就意味着比 \(x\) 大的值的下标的约数一个都不能选。

那么我们统计 \(y\) 的约数中有几个可以选,设这个值为 \(a\),再设当前所有能选的数的个数为 \(b\),那么 \(x\) 对应的方案数就是 \((2^a-1)\times 2^{b-a}\),也就是 \(a\) 中至少选一个,剩下的 \(b-a\) 个随便选的方案数,这是因为 \(a\) 中至少要选一个才能选到 \(x\)

时间复杂度为调和级数 \(O(n\log n)\)

赛时代码

E

构造题。

\(i\)\(a_i\) 连单向边,建成内向基环森林。

一种构造方案等价于将点黑白染色,黑白染色的过程比较复杂,具体看代码,主要就是:

  • 如果存在奇环,无解。

  • 如果存在偶环,那么黑白交替染色。

  • 如果自己不存在子节点为白色,那么自己是白色。

  • 如果自己存在子节点为白色,那么自己是黑色。

最后方案就是所有白点的出点编号,也就是白点下标对应的值。

赛后代码