Petrozavodsk Summer 2022 Day 2 赛后小结
比赛链接:https://qoj.ac/contest/1009
开局我看了 C ,但是感觉没有好写的写法,润了,感觉是签到,相信队友(主要当时在吃早餐,会了也写不了,但其实这个时候应该和队友说一下,还是太过相信队友了,虽然队友确实值得信任)。
后面队长看了,说 SB 题,写了,虽然后面听说他一开始的做法烦了,后面改成好写的在 15 min 一发过了。
F 和队友讨论,是 SB 题,上去写,过了。
K 我声称结论是异或和等于 $0$ ,和队友说了结论的证明,队友觉得没问题,但我不会计数,伟大的队长说是莫队,我一听,很对,然后上去写,WA 了,后面想了想证明,假麻了,我应该知道队友大部分时候是没认真听证明的。
接着队友非常给力的过了 J,G ,此时一个小时。
然后和队友接着讨论 K ,注意到三堆石头一定有解,四堆和 $-1$ 异或有关,这个时候就非常疑惑了。
三堆石头一定有解说明不是像 NIM 游戏那样纯粹的算式判定,但四堆石头的结论否定了这一点。
于是我们猜测跟奇偶性有关,但是我这个时候非常唐氏的搞了个 $5$ 堆先手无法直接操作到 $4$ 堆的例子,然后说这是不对的。
于是队友上去写了个暴力,发现 $5$ 堆没有反例,我发现反例我少考虑了个情况,于是觉得结论应该是对的,遂上机,过了。此时一个小时四十分钟,进入坐牢时间。
然后队长开 B ,我开 L ,Imakf 上机写 A ,Imakf 声称是讨论 + 插值。
然后一路写 + 调到三个小时才过,期间我和他讨论,但貌似是倒忙,因为我的声称是让他换题,原因是:为什么能插值,我们不知道,你讨论全了没,我们不知道,那没有写对的道理,况且有几道看上去能做的题目,所以我想让他下来做其他可做题。
最后过了,上 A 就是正确的,但是没过吗,也没有错,错在我帮不上忙,毕竟平时这种事是队长和他干的,我对这种题目一点想法都没有,为什么是插值不知道,为什么讨论全了不知道,Imakf 伟大,无需多言。
期间我 L 声称了一个做法,然后上去写,三个半小时 RE 了,发现做法又假了,后面下去吃饭,发现可以流,上去写在四个小时四十分钟过了。
Imakf 非常厉害的在四个小时 20 分钟的时候过了 E 。、
赛后 Imakf 声称 L 一看就可以流,但是他没说,这就是他的问题了,如果是假的,吹牛逼该罚,如果是真的,不说,该罚。
最后队长上机 B ,可惜因为我们队的唐氏儿本场比赛从头演到尾吃掉队长机时,导致队长最后遗憾离场。
细数这场我的罪孽,K,L 假做法吃掉大量机时,以后上机前麻烦认真想想自己的做法,不要假了,假了就炸了。
部分题解:
C
只要不出现一个数字出现 $n$ 次就可以,做法是把所有出现过的数字轮换一下填入。
F
显然 $x,k-x$ 处于一个等价类,相邻两个数字是等价类就可以删。
则做法为能删就删,
K
判断方法为:奇数先手必胜,偶数则所有数字 $-1$ 异或起来不为 $0$ 则必胜。
证明:
不妨考虑归纳,首先一堆是对的,现在假设 $k-1$ 堆是对的。
假设 $k$ 是偶数,那么显然是对的,因为谁先变成 $k-1$ 谁输,故是 $a_{i}-1$ 的 NIM 游戏,谁最先操作最后一个谁输。
假设 $k$ 是奇数,考虑先把所有数字减 $1$ ,即现在 $a_{i}\ge 0$ ,设异或起来为 $x$。
我们不妨证明以下两个情况的其中一个一定会发生:
- 我们能找到 $i≠j$ ,满足:$min(a_{i},a_{j})\le x\bigoplus a_{i}\bigoplus a_{j}\le a_{i}+a_{j}$ 。
- 我们能找到 $i$ ,满足:$a_{i}\bigoplus x=0$ 。
首先有几个性质:
- $x\bigoplus y\le x+y$
- 若 $y$ 的二进制最高位在 $x$ 中为 $0$ ,则 $x\bigoplus y \ge x$ ,如果为 $1$ ,则 $x\bigoplus y \le x$
然后讨论一下:
- $x=0$ ,随便取一个数字 $a_{i}$ ,否则取在 $x$ 最高位为 $1$ 的 $a_{i}$ ,简而言之,我们希望:$x\bigoplus a_{i} \le a_{i}$ 。
- 然后若 $x\bigoplus a_{i}=0$ ,则符合情况 $2$ ,否则找到在 $x\bigoplus a_{i}$ 最高位为 $0$ 的 $a_{j}(j≠i)$ ,故有:$x\bigoplus a_{i}\bigoplus a_{j} \le x\bigoplus a_{i} + a_{j} \le a_{i} + a_{j}$ ,同时有 $x\bigoplus a_{i}\bigoplus a_{j}\ge a_{j}$ ,综上,满足情况 $1$ 。
证毕。
显然这两个条件满足其中一个都可以直接导出 $k-1$ 的先手必败态,所以先手必胜,证毕。
思考过程就是手玩,发现 $3,4$ 堆的必胜条件后,去猜结论,然后证明出来就对了。虽然我们压根没证明,写暴力发现 5 堆也是对的就直接写了
$3$ 堆必胜的证明还是挺简单的,就是拿出最大的堆,留下剩下两堆差值的石头,然后和最小的堆合并,就可以剩下两个大小一样的堆,这样先手就必胜了。
在得到这个结论之后,莫队一下就做完了,时间复杂度:$O(n\sqrt{m})$ 。
1 |
|
L
显然,必要条件是最大边和最小边在一个边双上。
所以不妨猜测边双上的最大差值就是答案。
但是怎么证明这个事情呢?
边双有个很好的性质:割掉一条边不会影响连通性,那么什么东西和连通性有关呢?就是最小割。
这么考虑这个问题:
现在指定两条边,怎么确定性的构造一个环经过这两条边呢?考虑把这两条边删掉,以这两天边的两个端点分别作为起终点,只需要证明这个图的割 $> 1$ 就行了,一个比较有疑惑性的事情是,我们其实已经删掉了两条边,所以会不会不满足割的性质,但由于我们求最小割实际上考虑的是这四个点之间的连通性,所以其实等价于没有删除。
证明:我们假设被割的边是 $(x,y)$ ,显然 $x,y$ 不会是网络流图中的 $st,ed$ ,考虑边双中这个边被割掉后,这四个点一定有两个点不依赖于这两条边联通,所以网络流上仍然是联通的,矛盾,证毕。
具体来说,设一条边为 $(l_1,l_2),(r_1,r_2)$ ,求 $l_{1},l_{2}$ 到 $r_{1},r_{2}$ 的最近点对,显然 $(l_1,l_2),(r_1,r_2)$ 不会在这条路径上,否则与最近点对矛盾。
然后跑网络流就行了。
时间复杂度:$O(n)$ 。
至于退流,由于边权为 $1$ ,所以直接退就是对的吗?