C - Camels and Bridge
一座桥有 (M) 部分,第 (i) 部分承重 (v_i),长度 (l_i)。
有 (N) 个人要过桥,第 (i) 个人的重量是 (w_i)。
你需要将这 (N) 个人排成一队,可以随意安排这 (N) 个人的顺序、两两之间的距离。
一个人站在某个部分的端点上时,其重量不计入任何部分。
求最小化的第一个人和最后一个人之间的距离。
(2 le N le 8),(1 le M le 10^5),(1 le w_i, l_i, v_i le 10^8)。
2s, 1GB
暴力 (O(N!)) 枚举过桥的顺序。
接下来贪心求出每个人离排头的最短距离即可,正确性显然。
考虑具体如何贪心:对于当前正在安排的人 (i),因为 (1 sim i - 1) 之间的距离已经被安排好了,于是枚举前面的另一个人 (j),对于 (j sim i) 这一段,在 (M) 个部分中二分查找出承重 (le w_j + cdots + w_i) 的最长距离,即可以算得 (i) 的位置。
时间复杂度 (O(N!N^2log M))。
https://atcoder.jp/contests/arc105/submissions/25999319
D - Let's Play Nim
有 (n) 个袋子,(n) 个盘子,初始时第 (i) 个袋子里有 (a_i) 个石头,盘子都是空的。
A, B 两人轮流操作,A 先:
- 如果当前还有袋子非空,则选择一个袋子,将里面的所有石头倒到某个盘子中。
- 如果当前袋子都是空的,则选择一个盘子,从中取走至少一个石头。
不能操作者输。
试判断谁会赢,需要回答 (T) 组数据。
(1 le T le 10^5),(1 le N le 10^5),(sum N le 2 imes 10^5),(1 le a_i le 10^9)。
2s, 1GB
根据 (n) 的奇偶讨论。
当 (n) 是奇数时,先手希望最终盘子里石头的异或和为 (0),但这是不可能实现的,因为后手必然可以选择当前最大的一个袋子,将里面的石头全部倒入当前石头最多的一个盘子中,只要这么做,异或和不可能等于 (0)。所以 (n) 是奇数后手必胜。
当 (n) 是偶数时,先手希望最终盘子里石头的异或和不为 (0),那么,除非每种数量的袋子都有偶数个,后手可以通过模仿棋来取胜,不然的话,先手也可以利用每次选择最大的袋子倒入石头最多的盘子的方法,保证异或和不为 (0)。
根据上述过程判断即可,时间复杂度 (O(N log N))。
https://atcoder.jp/contests/arc105/submissions/26013056
E - Keep Graph Disconnected
给定一张包含 (N) 个点,(M) 条边的无向图 (G),第 (i) 条边连接 (a_i, b_i)。
(G) 被称为好图当且仅当:
- (1) 和 (N) 不连通。
- 没有重边和自环。
保证初始时 (G) 是好图。
现在 A, B 轮流操作,A 先。每次选择两个点 (u, v),在它们之间加一条无向边,当某个人操作后 (G) 不再是好图就输了。
试判断谁会赢,需要回答 (T) 组数据。
(1 le T le 10^5),(2 le N le 10^5),(0 le M le min(frac{N(N-1)}{2}, 10^5)),(1 le a_i, b_i le N),初始图是好图,(sum N, sum M le 2 imes 10^5)。
首先可以发现,游戏结束的时候图中一定是包含了两个连通块。
设两个连通块的大小分别为 (n) 和 (N - n),加入的边的条数就是 (N(N-1) / 2 - n(N - n) - M),而胜负也就取绝于这个数的奇偶性。
注意到,当 (N) 为奇数时,(n(N - n)) 必然是偶数,那么胜负是固定的,可以直接判掉。
接下来考虑 (N) 为偶数的情况。令 (x, y) 分别表示初始包含 (1) 和 (N) 号点的连通块大小。
如果 (x otequiv y pmod 2),那么去掉 (1, N) 所在的两个连通块,图中还剩下奇数个奇连通块,那么先手必然可以控制 (1, N) 所在连通块的奇偶性,进而达到必胜的目的。
如果 (x equiv y pmod 2),那么如果原始图上是利于 A 的局面,A 必然可以维护好这个局面;如果原始图上是利于 B 的局面,那么当 A 试图改变局面时,必然会被 B 阻拦(原因参见上一种情况)。所以这种情况的答案取绝于初始局面。
所以直接 DFS 一遍即可回答问题,时间复杂度 (O(N))。