3.20 做题总结
AGC019f
思考这样一种策略:我们每次选择剩余的多的那个选项,这样最优。
这种方法成立的基础是我们的猜测不会对之后的各个题的答案产生影响。
于是我们把 \(0\) 的个数和 \(1\) 的个数合成一个点的坐标,那么我们就是从 \((n,m)\) 走到 \((0,0)\)。
思考这个坐标系上的 \(y=x\),我们做的事情就是尽量靠近这条线。最终的答案就是我们的策略(一条折线)与答案折线的交集。
思考这样一件事:如果我们没有通过 \(y=x\),那么答案是固定的,为 \(min(n,m)\)。
额外的贡献就是与 \(y=x\) 相遇时的选择。这时我们没有固定策略,获得正确答案的期望是 \(\frac{1}{2}\)。于是我们统计折线遇到 \(y=x\) 的期望,再加上前面的 \(min(n,m)\) 就是答案。
LOJ #520 虐狗IOI(开端)
打表发现规律,答案一定是 \(1,2,4,...5,3,1\) 的形式。
证明可以看官方题解,我没证出来,鉴定为菜。
LOJ #521 虐狗IOI(抵达)
每个城市的庇护城市不相同,因此我们发现所有城市都会被当作庇护城市一次。
这样我们可以发现唯一的合法解就是相邻的两个绑一起。
思考反证。对于叶子节点,他的庇护城市一定是他的父亲。如果他的父亲不连向他,他就不会作为庇护城市,与上面推出的性质不同。之后可以把这两个点删掉,变成一个形式相同的子问题。
对于上面的这个图,\(5\) 因为 \(1\) 的缘故,肯定比 \(8\) 小,因为此时 \(1\) 将 \(5\) 作为庇护所。
于是我们按照大小关系建有向边,每次在入度为 \(0\) 的东西里贪心选取最小的编号拓扑排序即可。
因为每个点要么和他绑一起的点还有边与其他点相连,要么自身与其他点相连,所以必定会有大小关系存在。无需判断孤立节点。
LOJ #522 虐狗IOI(危机)
根据性质 \(1\),这是个 DAG。
朴素思想是在 DAG 上 dp,将直接引爆与间接引爆都连边,用类似于 floyd 的方法解决。复杂度 \(O(n^3)\)。
发现可以优化建图方式,只建 \(d(u,v)=2\) 的节点(这个东西在原题中有定义)之间的边,然后再跑。由于每个点最多左边一个点相连,右边一个点相连,所以复杂度骤降。
实际上,如果你写出来交上去,就会发现过了。
LOJ #523 虐狗IOI(悬念)
基环树dp,不想写。