CF1404 Div1 VP记录

发布时间 2023-04-22 16:00:54作者: _maze

A

B

看到这道题的第一眼:Bob 怎么赢?

样例二给了解释,对于一条链,Bob 看 Alice 到了哪边,跳到另一边即可。

大胆猜测,这是 Bob 能赢的唯一机会。其他时候 Alice 采用步步逼近一定能取得胜利(详情请参见国际象棋中的单后杀王)。

使用这个方法要满足三个条件:

  1. \(db > 2 * da\)。否则 Bob 逃不出 Alice 的抓捕范围。

  2. 树上直径也要大于 $ 2*da$。否则 Bob 空有 \(db\) 也没用。

  3. Alice 第一步不能直接将 Bob 干掉。

依次判断即可。

C

考虑离线。对于\(y \in [1,n]\)\(f_i(i\le y)\) 表示询问为 \((x,y)\) 的答案。

\(y\) 变为 \(i + 1\) 时,只有 \(i - a_i \le f_i\)\(f_i\) 才会 +1(此处只考虑 \(a_i\le i\) 的情况,大于的情况显然永远不可能满足)。

于是树状数组 + 二分即可。

D

通过这迷惑的题意,我们大胆猜测无论哪种情况下,必定有一方有必胜策略。

根据样例,大胆猜测当 \(n\) 为偶数时,作为配对的人, \(i\)\(i + n\) 放一组即可。

思考最终选出的和,必定是 \(\sum^{n}_{i=1} + nk\) 的形式。其中 \(k\) 为选了多少个大于 \(n\) 的数。

这绝对不可能是 \(2n\) 的倍数,因为这个式子可以化成 \(n(\frac{n+1}{2} + k)\),括号内压根不是个整数,自然也不可能是 \(2\) 的倍数。

因此我们只要考虑 \(n\) 为奇数的情况。揣测一下出题人的意图,我们猜测此时选择方有必胜策略。

不难发现,当 \(n\) 为奇数时,只要对于每个 \(i\)\(i + n\) 中选择一个,结果(也就是上面的式子)只有两种情况:是偶数,或者反着选就是偶数。

问题变成了:\(i\)\(i+n\) 不能同时选,同时还有额外 \(n\)\(u\)\(v\) 不能同时选,求出一种选择方案。

如果将所有限制连边且允许重边,每个点有且仅有两条边与之相连,因此整个图必定是若干个环。

又因为环上相邻的点不能同时选,所以我们隔一个选一个即可。

E

每个点只有两种情况:竖着或横着。且两者只能选择一种。我们不妨用两个格子中间的分界线作为竖放和横放的标志。

因此,如果一个点有两种消除边界线的方式,我们就把他们两个连边。显然,连完边后是一张二分图,其中所有竖着放置的方案在一边,横着的在另一边。

在这个图上选取的点都能使答案减小,因此我们希望选取最多的点。这就变成了一个最大独立集的问题。

用匈牙利算法求解即可。