战况:

image

别的不说,这个 B1 WA 3发是真的精髓。

A

B

我们设此时在第一队队尾的为 las0,在第二队队尾的为 las1,要放的数为 x。

先考虑 B1:

显然有:如果 las0 等于 x,放在第二队,如果 las1 等于 x,放在第一队。

考虑两边都不同的情况,我们想要这个 x 后面尽快跟上一个不同的数,依此来创造新的段落。所以比较下一个 las0 与下一个 las1 在的位置,取小的那一边。

现在考虑 B2:

显然有:如果 las0 等于 x,放在第一队,如果 las1 等于 x,放在第二队。

考虑两边都不同的情况,我们想要这个 x 后面慢一点跟上一个不同的数,依此来合并后面相同的项(从 las 的角度理解:我们想要保留这个 las 与下一个 las 合并的可能性,位置在前的可能性更大)。所以比较下一个 las0 与下一个 las1 在的位置,取大的那一边。

C

2500 评蓝实在有点搞人心态。。。这道题其实挺好玩的。

看到 32,就想到二进制拆分。

于是我们先考虑 \([1,2^k-1]\)

显然只要把一个数的二进制拆开就行了。可以构造这样的图:设初始点为 \(-1\)(题目里是 \(1\)),初始点向除了终点的所有点连边权为 0 的边,点 \(x\) 向大于 \(x\) 的所有点连边权为 \(2^x\) 的边。

把条件放宽,发现把 \(1\) 去掉不好考虑,不妨先看看 \([1,2^k+t]\)。设想一个具体的例子:\(k=3,t=3\)

由于这道题跟二进制有关,把最大的数转化为二进制就是 \(1011\)

我们发现不只是终点,图上的每一个点都有一个以它为终点可以取到的范围。如果按照上面的编号方式,以点 \(i\) 为终点得到的区间为 \([1,2^k-1]\)

大胆猜想,我们只需要新增一个点 \(u\)。那么由于原图取不到 \(1000\)(二进制),所以 \(u\) 到终点的边权肯定为 \(1000\)。那么我们需要以 \(u\) 为终点的取到的数的范围为 \([1,11]\)

这个可以通过原图上范围为 \([1,1]\) 与范围为 \([0,0]\)(起点)连边得到。实现不难。

于是无论最终的情况是什么样的,我们把新增的每个 \(1\) 分开做即可。

考虑原题:\([L,R]\) 实际上就是 \([1,R - (L - 1)]\)。把起点连到一个中转点,边权为 \(L-1\),然后参照前文即可。

D

敬请期待:莫队专题

E

改完 \(D\) 再说