ABC391 做题记录
除了 G 都做出来了,结果看上去还行,过程有点难绷:花了十分钟过了 ABC 之后,写了 20min 的 D 假做法,交了之后过不了,于是先去写 E。过了 E 之后重新回来看 D,发现做法假完了,于是改改改,但改完仍然过不了,此时还有 25min。然后丢下 D 去看 F 了,诶这不是我们 P1631序列合并 和 ABC123D 吗?怎么 ABC 开始出典题了?写完之后还剩大约 6 分钟,回来肉眼 debug D,发现把一个 a
写成了 i
,但之前居然过了所有的样例,绷不住了。改了之后没来得及编译就交了(此时还有 36s),有惊无险地通过了
D
细节有点多。
设第 \(i\) 个方块是第 \(X_i\) 列的从下往上第 \(h_i\) 个方块。那么,如果满足 \(h_j = h_i\) 的 \(j\) 不足 \(W\) 个,这就说明把所有方块都落下来以后,第 \(h_i\) 行不能凑满,因此第 \(i\) 个方块永远不会被消除。
否则,我们需要计算出第 \(i\) 个方块被消除的时间。由于 \(h\) 相同的方块被消除的时间显然相同,分别计算每个 \(h\) 被消除的时间,\(h = o\) 时方块被消除的时间记为 \(d_o\)。询问时,只需比较 \(d_{h_a}\) 和 \(t\) 的大小,如果 \(t \ge d_{h_a}\) 那么第 \(a\) 个方块被消除,否则没有被消除。
接下来的问题就是对 \(1 \le i \le n\),计算 \(d_i\)(如果满足 \(h_i = o\) 的 \(i\) 不足 \(W\) 个,那么无需计算。这里取 \(n\) 是一个方便的上界。)这里的结论是 \(d_o = \max\{y_i|h_i = o\}\)。这是因为显然第 \(o\) 层被消除时,必须等待这一层最高的方块落下;然后可以证明最高的方块落下时不会被挡住。
E
直接递归计算即可。
F
经典贪心(P1631,ABC123D)。
G
dp 套 dp。和 P10614 基本完全相同。