Atcoder ABC399 题解

ABC399

又是上大分的一天,rk143,rating+131。

A

枚举每一位,看看对应的 \(s_i\)\(t_i\) 是否不等,数出个数输出即可。

submission.

B

算排名的问题,重分就排名相同。我们有一个结论,一个值 \(x\) 的排名就是数组中严格大于 \(x\) 的数字个数加一。因为 \(n \le 100\),所以这个直接 \(O(n^2)\) 算就行。

submission.

C

每个连通块是独立的。
连通块怎么改成树呢?树的点数是边数加一,故将答案加上【边数减点数加一】即可。

submission.

我的写法,无向边一来一回会被算两遍,故除以二。

D

正常枚举值域算,肯定是算不了的。

记数字 \(a\) 出现的两个位置为 \(p0_a,p1_a\)
交换操作是随便换的,故有序数对 \((a, b)\) 满足限制,一定有 \(p0_a, p1_a, p0_b, p1_b\) 中,最小与次小相邻(即最小等于次小减一),最大与次大相邻。

\(p0_a 和 p1_a\) 又不能相邻,故一个 \(a\) 一定和一个 \(b\) 相邻。
也就是,枚举 \(A_i\),看看 \((A_i, A_{i-1})\) 合不合法,\((A_i, A_{i+1})\) 合不合法,累加即可。
注意要用一些手法保证不重,比如钦定 \(a<b\),以及用 set 记录哪些 \((a, b)\) 被算过。

submission.

E

分讨题。

首先观察,若存在 \(i \ne j\),满足 \(s_i=s_j\)\(t_i \ne t_j\),即 \(s_i\) 的后继不统一,就无解。

然后,各连通块显然独立。

然后我们进行建模,连出所有的有向边 \((s_i, t_i)\),表示变换过程,可以得到一个基环森林(每个强弱连通块只存在一个环)。假如此时有一条表示变换的路径,我们从路径末端开始进行变换,一定是合法的,此时的次数就是路径的边数。
如果有环呢?

观察样例 4 可以发现,我们可以选择一个中转点,破环为链,有一次额外的操作。
什么时候不需要额外的操作?
假如有个环 \(a\to b\to c \to a\),同时又有 \(d \to c\),我们可以把 \(a\) 先变成 \(d\),再正常操作。也就是说,我们可以选择一个不在任何环(包括自环)上的点作为中转点,操作次数仍然是边数。

如果所有点都在某个环上呢?
\(s=t\),操作次数为 \(0\)
否则,无解。

这样就做完了,我乱写写的 \(O(n+C^2)\),其中 \(C\) 为字符集。

submission.

F

比 E 简单。

我们令 \(A_i=\sum_{j=0}^i A_j\)
那么就是要求 \(ans=\sum_{0\le l < r \le n}(A_r-A_l)^k\)
用二项式定理展开,有 \(ans=\sum_{0 \le l < r \le n}\sum_{j=0}^{k}A_r^jA_l^{k-j} \binom{k}{j} (-1)^{k-j}\)
考虑枚举 \(r,j\)。再做前缀和 \(sum_{i, j}=\sum_{x=0}^{i}A_x^j\),上面的式子可以用前缀和优化。时间复杂度 \(O(nk)\)

注意此意义下,\(0^0=1\)

submission.

G

不会,毕竟全场只过了 \(3\) 个人。

posted @ 2025-03-29 19:56  wfc284  阅读(368)  评论(0)    收藏  举报