AtCoder Regular Contest 148 D – mod M Game
鲁莽的尝试?
一个非常显然的 Bob 的必胜局面是:对于任意 ,在这 个数中的出现次数均为偶数。由此 Bob 可以选择与 Alice 上一轮选的相同的数而获胜。
那……其他局面就一定是 Alice 必胜么?
我们只依靠该结论交一份代码。不出意料,没有通过。不过它只错了两成的测点!看来大体方向是正确的。
AtCoder Regular Contest 148 D – mod M Game
一个非常显然的 Bob 的必胜局面是:对于任意 ,在这 个数中的出现次数均为偶数。由此 Bob 可以选择与 Alice 上一轮选的相同的数而获胜。
那……其他局面就一定是 Alice 必胜么?
我们只依靠该结论交一份代码。不出意料,没有通过。不过它只错了两成的测点!看来大体方向是正确的。
一场相当有收获的比赛。比赛链接
尝试观察规律。我们发现,在完成次操作以后,左端点的可能取值为,右端点的可能取值为。假如现在我们达到最终状态,其。那么,在的二进制表示中,如果从高到底第位为,则在第轮中,有check (mid) == 0
,向右区间递归;否则向左区间递归。这是很容易解释的:若向右递归,则右端点不变。而在下一层,右端点表示中的所有系数乘,所以体现为二进制位末尾添一个。反之,就变成,在下一层中体现为。如果其有位为,则到达该状态的概率为。
以时的状态为例。的三位二进制表示为,则推断出在前三轮分别向右、左、右区间递归,到达其的概率为。 (更多…)
AtCoder ARC 134 C – The Majority
如此ruzhi的一道题目竟花去两小时有余,比赛结束也没写出来,实在惭愧。
拿到题目,很快想到一种DP:令表示“考虑到第个盒子,第种小球用去个,第种小球用去个”的方案数。容易转移。
然后发现是级别。同时题目告诉我们,相同类别小球无法区分,所以要是上述做法正确,为什么要分别给出呢?如何在转移时确保每一种小球的使用次数正确?立刻想到正解与基本无关。
昨晚参与AtCoder ABC 236时认为G题似乎可做,直到看到数据范围才发现事情没有那么简单。
由于最近学习离线数据结构,又见识过一道题意接近的题目,故想到整体二分,二分每一个节点第一次能恰好经过条边到达的时间,然后考虑DP求解。设计状态表示在该图上经过恰好次转移能否到达点。但很快发现每一次二分时均要重新在图上运行DP,时间复杂度无法承受。况且DP递推转移的次数高达,甚至不可能是线性的复杂度。
今天查看题解,发现有几个重要的,从未考虑过的trick: