AGC010

A

答案为 YES 当且仅当奇数有偶数个。

B \((\texttt{Easy} \ 1 / 0)\)

首先把 \(\frac{n(n + 1)}{2} \not| \sum_i a_i\) 判掉,然后我们可以得到操作次数 \(k\)

\(d_i = a_i - a_{i - 1}\),特别地,当 \(i = 1\)\(d_1 = a_1 - a_n\)。设 \(x_i\) 表示从 \(i\) 开始的操作个数,有

\[\sum x_i = k \]

\[nx_i - \sum x_i + d_i = 0 \]

答案为 YES 等价于存在非负整数解,直接判即可。

C \((\texttt{Easy} \ 1 / 0)\)

找到一个度数不为 \(1\) 的点,以它为根 \(\rm dfs\),发现可以确定 \(\rm LCA\) 为当前点的叶子点对个数,直接判一下能否达到即可。注意对根的要求更为严苛一些。

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

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

好像是之前的考试题,考场上好像是因为一些奇妙原因挂掉了,但是这个题过了。

不难发现答案只与奇偶性有关,所以我们只用关心 \(2\) 的幂次。

分类讨论。首先如果有 \(1\) 那么结局已定,下面假设所有数 \(> 1\)。如果只有 \(1\) 个奇数,那么先手有两种做法:选择奇数,不改变总和的奇偶性;选择偶数,改变总和的奇偶性。否则,先手一次操作必然改变奇偶性,这时已经能确定胜负了——如果每一步奇偶性都改变的话先手会胜利,那么先手可以让每次后手操作的时候奇数个数 \(> 1\);否则后手可以让先手每次操作时奇数个数 \(> 1\)

所以必胜策略非常简单,直接模拟即可。

E \((\texttt{Medium} \ 4 / 0)\)

\(a_i\) 排序。

首先后手的策略肯定是这样的:

  • 对于所有 \(i < j, (a_i, a_j) > 1\)\((i, j)\),连一条 \(i \to j\) 的有向边,这样会形成一个 \(\rm DAG\)
  • 对这个 \(\rm DAG\) 拓扑排序,每次取当前入度为 \(0\) 的最大的点。

那么先手的策略,就是把第一步中的图定向。

考虑把 \(i\) 的所有出边排序,然后 \(\rm dfs\) 得到生成森林,设这样定向后手第一步可以选择的最大的数为 \(m\),容易证明任意一种定向方式后说第一步可以选择的最大数都 \(\ge m\),于是可以归纳证明正确性。

时间复杂度 \(\mathcal{O}(n^2 \log \omega)\),其中 \(\omega\) 为值域。

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

\(n \le 3000\) 的数据范围允许我们对于每个点 \(\mathcal{O}(n)\) 判定。

首先发现,对于一个点 \(u\),如果对于与其相邻的任意节点 \(v\) 都有 \(a_v \ge a_u\),那么从 \(u\) 开始先手是必败的,因为每次先手挪到一个地方,后手就挪回去。

因为树是一张二分图,我们肯定希望我们当前所在的点石子数量越多越好,而如果挪到 \(a_v \ge a_u\) 的点,对手可以挪回来,所以这样做是劣的,我们每次只会往 \(a_v < a_u\)\(v\) 走,直到无法再走了,于是可以用树形 \(\texttt{dp}\) 简单地实现 \(\mathcal{O}(n)\) 判定。

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

posted @ 2022-03-24 15:07  Scintilla06  阅读(61)  评论(0编辑  收藏  举报