AtCoder Regular Contest 081
难度正常的一场 ARC。
A 题感觉有点眼熟,但是不管了,反正是可以秒掉的题。
B 题:
难度:2.0
难在第一步的观察(当然可能非常套路)
由于是
2
×
n
2\times n
2×n 的网格,所以不难推出,形状一定是多个竖着的骨牌,然后多个横着的骨牌,然后又是竖着的骨牌…
所以就直接排列组合乱搞竖着横着然后从左往右搞就好了。
C 题:
难度:2.9
惨遭这题误导
结果就是想了一年的子序列个数还是不会。。
康了康题解草了我第一印象又是对的,居然真的是打牌,只不过我没有想到从后往前,我果然是个伞兵。
话说这玩意居然叫子序列自动机(
D 题:
难度:3.1
有点困难(
首先考虑最简单的情况,一个
2
×
2
2\times 2
2×2 的矩阵能够被统一成全
1
1
1 的充分必要条件事神魔?一共只有
2
4
2^4
24 中情况,枚举可得这个矩阵中恰好有偶数个
1
1
1。
进一步有一个结论,即一个大矩阵能全 1 1 1 当且仅当它所有 2 × 2 2\times 2 2×2 的矩阵均可以变成全 1 1 1。
所以原问题转化为对于每个合法
2
×
2
2\times 2
2×2 矩阵标记一下,求最大全
1
1
1 矩阵。
方法1:把矩阵中的0用一个很大的负数来替代,这样就转化为“最大子矩阵和问题”
几万年后的 UPD:学校比赛考了这题,(大抵)切了。但是忘记了特判 m a x ( n , m ) max(n,m) max(n,m)。
现在再来重新写一遍这题做法。
结论:一个矩阵能全部成为黑色,当且仅当它的每个 2 × 2 2\times 2 2×2 的子矩阵都合法。
首先必要性很好证明。
充分性:当把这个矩阵第一行变成全黑的时候,由于此时所有 2 × 2 2\times2 2×2 矩阵依然合法。所以之后的每一行要么全黑要么全白。
所以就把每个 2 × 2 2\times 2 2×2 的矩阵标记一下,求最大全 1 1 1 矩阵。
枚举每一行,预处理向下有几个 1 1 1 ,变成了广告覆盖问题,使用单调栈可以做到 O ( n m ) O(nm) O(nm)。