AGC011

这一场居然全部 \(\texttt{Easy}\) 了!!!

A

排序以后模拟即可。

B

二分答案,判定从小到大合并即可。

C \((\texttt{Easy} \ 3 / 2)\)

发现 \((a, b) \to (c, d)\) 当且仅当存在一对 \(a \to c\)\(b \to d\) 的路径,使得其长度相等。

因为可以反复横跳,只需要有一条路径长度奇偶性相等即可。

这样的话如果不是二分图那路径奇偶性随意,如果是的话就确定奇偶性了。

分类讨论一下 \(a, c\)\(b, d\) 分别在哪个连通块内即可。注意,大小为 \(1\) 的连通块需要特判。

D \((\texttt{Easy} \ 2 / 0)\)

手模一下可以发现一次操作有两种情况:

  • \(s_1 = \texttt{A}\):直接被撞回去,\(s_1\) 变为 \(\texttt{B}\)
  • \(s_1 = \texttt{B}\):把 \(s\) 取反后循环左移一位。

感性理解加上打表可以发现 \(k > 2n\) 的时候答案有长度为 \(1\)\(2\) 的循环节,所以可以把 \(k\) 降到 \(\mathcal{O}(n)\) 级别,然后就可以直接模拟了。

时间复杂度 \(\mathcal{O}(n)\)

E \((\texttt{Easy} \ 2 / 1)\)

\(n = a_1 + a_2 + \cdots + a_m\),记 \(s_p\) 表示所有 \(a_i\) 的十进制第 \(p\) 位之和。我们只需要满足以下两点,就一定能构造出 \(m = \max \{ \left\lceil \frac{s_p}{9} \right\rceil \}\) 的一组合法解:

  • \(\sum_i 10^i s_i = n\)
  • \(s_i \le s_{i + 1}\)

直接二分答案,从后往前确定 \(s\) 可以做到 \(\mathcal{O}(\log n \log \log n)\),足够通过。

另一个思路是一个数是上升数当且仅当其可以被表示为 \(9\) 个形如 \(\frac{10^x - 1}{9}\) 的数,那么 \(n\) 可以被表示为 \(k\) 个上升数的和当且仅当存在 \(p_1, \cdots, p_{9k}\),使得

\[9n + 9k = \sum\limits_{i} 10^{p_i} \]

\(9n + 9k\) 的各位数码之和不超过 \(9k\)。发现这个 \(k\) 并不大,直接枚举可以做到均摊 \(\mathcal{O}(\log n)\) 的时间复杂度。

F \((\texttt{Easy} \ 3 / 3)\)

题面的图给得好啊!如果没有这张图我估计会多走很多弯路!

我们发现,只要不改变线段的相对顺序,横条是可以任意挪动的。这意味着我们可以钦定 \(n \to 0\) 的列车从 \(0\) 时刻开始走并且不停歇。

于是我们把问题转化为了在模 \(k\) 意义下,有一个初值任意的整数 \(x\),每次需要给 \(x\) 加上一个数,使得其落在一个区间内,求加数的和的最小值。

\(f_{i, j}\) 表示 \(i\) 次操作后 \(x = j\) 的最小值,使用线段树转移就是每次给一个区间重新赋值,直接把所有区间端点离散化,然后维护 \(f_j - j\) 的最小值就行了。

时间复杂度 \(\mathcal{O}(n \log n)\)

posted @ 2022-09-20 21:41  Scintilla06  阅读(11)  评论(0编辑  收藏  举报