Codeforces Round 406 Div.2

Posted on By 二价氢

A. The Monster

给定$0 \le a, b, c, d \le 100$, 求$k_{\min}$使得$k_{min} \equiv a\ (\mod b)$且$k_{\min} \equiv c (\mod d)$

由初等数论知识知道$k_{min} \le bd + \min{a, c}$

所以枚举一下k的值就好,比赛完后想了好长时间才给自己证明这个东西……一个小时没睡着

#25736555

B. Not Afraid

给定若干个集合,以及若干对数$1, -1, 2, -2, \ldots n, -n$

在$k, -k$中有且仅有一个数是“坏的”,但是你不知道是哪一个

问是否有一种情况使得给定的集合有一个集合,其中的所有数都是“坏的”

……

最开始以为是2-sat问题,后来发现完全想复杂了,直接看是不是每一个集合中都存在一个$k$,使得$k$与$-k$都在这个集合里面就好

居然还有人想hack我……

#25740743

C. Berzerk

A与B在玩一个游戏,有一个圆形的棋盘,AB轮流行动,将棋子顺时针移动$s_i$格,谁先把棋子移到了1号格子就赢了。

对于每一个状态,询问是否为先手必胜/必败/无限循环状态

按照SG函数的搞法,把这个图建出来,将1号格子A先手与1号格子B先手都设成先手必败状态,然后BFS之。

  1. 如果一个状态是先手必败,那么它所有的后继都是先手必胜
  2. 如果一个状态是先手必败,那么当且仅到它所有的前驱都是先手必胜
  3. 如果我们最后都不能确定一个状态是否为先手必胜或是必败,那么它就是无限循环

比赛的时候一直在想顺着推的方法,结果第一组Case都过不了。比赛结束之后看了一下题解下面的评论就明白了,我们不需要特别讨论无限循环状态,按照一般讨论DAG的方式去讨论即可。

#25762368

D. Legacy

区间用线段树处理。

看到这一句话就秒懂了……在比赛的时候想到常规的做法就是区间单独建一个点,但是这对复杂度的优化没有效果。借助线段树这个工具,我们只需要$O(n)$个额外的结点即可完成区间的处理。

#25776162

E. Till I Collapse

主席树

看到题解中的这一句话……我又秒懂了……

我们知道答案的和是$O(n \log n)$这个级别的,所以暴力处理每一个询问的$k$即可。

对于每一个$k$,用主席树找到右端点确定时,区间颜色为$k$的最远的左端点。

需要注意的是,二分这个左端点会超时,需要在线段树上二分左端点的位置。

#25785825

难怪有人一开场就把E给过了……