Codeforces Round 974 (Div. 3)

A. Robin Helps

模拟即可。

B. Robin Hood and the Major Oak

注意到 \(i^i \equiv i \pmod 2\),因此 \(\sum i^i \equiv \sum i \pmod 2\)。等差数列求和即可。

C. Robin Hood in Town

二分答案即可。

D. Robert Hood and Mrs Hood

枚举区间 \([l, l + d - 1]\)。此时我们需要快速求解有多少区间与 \([l, l + d - 1]\) 有交。

考虑求解其补集。注意到 \([l_1,r_1]\)\([l_2, r_2]\) 无交意味 \(r_1 < l_2\)\(r_2 < l_1\)。问题变成了求有多少区间的左端点小于某个值,以及有多少区间的右端点大于某个值。前缀和预处理即可。

E. Rendez-vous de Marian et Robin

考虑拆点。我们将点 \(i\) 拆成点 \(i\) 和点 \(i + n\),其中点 \(i\) 表示到 \(i\) 点时没有骑马,点 \(i + n\) 表示到 \(i\) 点时骑上了马。那么对于一个有马的点 \(u\) 连边 \((u, u+n,0)\),对于一条边 \(u, v, c\) 连边 \((u,v,c)\) 以及 \((u+n,v+n, c/2)\)。然后分别从点 \(1, n\) 跑 Dijkstra 求单源最短路。最后枚举两人到哪个点集合,并分别枚举两人到达时是否骑马即可。

F. Sheriff's Defense

\(f(u, 0/1)\) 表示若只考虑以 \(u\) 为根的子树,且 \(u\) 是否被强化过的最多金币。

转移考虑 \(u\) 的每个儿子是否被强化。令 \(u\) 的儿子为 \(v\),则:

\[\begin{matrix} f(u, 0) &=& \sum_v \max (f(v,0), f(v, 1) )\\ f(u, 1) &=& a_u+\sum_v \max( f(v,0), f(v, 1)-c)\\ \end{matrix} \]

H. Robin Hood Archery

注意到当区间长度为奇数时一定为 NO。答案为 YES 当且仅当长度为偶数,且区间内第 \(2k-1\) 大的数都等于 \(2k\) 大的数。

这个条件等价于区间内每种数字都出现了偶数次

考虑异或哈希。该命题成立的必要条件是区间内所有数的异或和为 \(0\)。我们可以通过赋随机权值的方式使其充分性提高。

快速求解区间异或和可以差分。

posted @ 2024-09-22 17:01  2huk  阅读(344)  评论(0编辑  收藏  举报