10.5 模拟赛(NOIP十三连测 #11)
2024--梦熊&太戈--NOIP十三连测 #11【订正】 - 比赛 - 梦熊联盟 (mna.wang)
复盘
赢麻了(?)
老师说照着 \(300\) 分打。
顺序开题。T1 读懂题后模拟了一下样例,发现答案就是 $n - $ 连通块???快速写完了代码发现大样例全过了。此时 8:05。
T2。一眼 DP。但是 \(n \le 10^6\) 所以放弃了。先写了 \(n^2\) 的 \(30\) 分 DP。猜测正解是贪心,但其实不是。
有两个特殊性质。用暴力程序模拟了一下也做出来了。
T3。没有思路。
T4。暴力是最短路,但是只会这 \(20\) 分。
尝试做特殊性质。打表发现找规律未果遂放弃。其实不用找规律直接做也不难。
T2 还剩 30 分不重要了。所以做 T3。
发现有 \(48\) 的暴力分,不是很难。冲正解。
发现一个美妙的性质。模拟了一会大样例(很强对吧),但是还找不到一个通用的方法。
但是直接爆搜加上剪枝可能会跑的特别快,起码 \(48\) 分能拿到。于是爆搜启动。
写了 1e4514min 终于过大样例了。但是跑了 50s。
卡常。发现是备份用时太长了。换了一种备份方法。
跑大样例。0.8s????
哦 WA 了。调了 1e4514min 后过了。还是 0.8s。
非常非常好的爆搜,是我的大脑旋转。这样应该能拿 \([64,100]\) 分。
调完还剩 10min。检查。
最后一分没挂!\(100+70+64+20=254\)。其实 T4 还有 \(10\) 分是不难的,但光想偷懒打表找规律了。
总结
好的:
- 爆搜没写挂。
差的:
- 不要偷懒。
知识点
- T1:并查集。
- T2:DP。
- T3:性质。
题解
A. 公交车
显然 $n - $ 连通块数量。
B. 出租车
考虑最朴素的 DP。设 \(f(i, j)\) 表示消除 \(a_{1 \dots i},b_{1 \dots j}\) 的代价。转移显然:
直接做是 \(\mathcal O(n^2)\) 的。考虑优化。
注意到 \(f(i-1,j-1) \le \min(f(i-1,j), f(i,j-1))\)。所以:
满足 \(a_i = b_j\) 的状态 \(f(i, j)\) 只有 \(\mathcal O(n)\) 个。我们称这样的状态为特殊状态。
注意到对于非特殊状态(\(a_i \ne b_j\)),它一定会从 \(f(i-1,j-1)\) 转移而来。如果 \(f(i-1,j-1)\) 仍不是特殊状态,那么又会从 \(f(i-2,j-2)\) 转移过来。发现每次用到的状态都是唯一确定的,而且两维状态的差固定。
这个过程会持续到 \(f(i', i'+j-i)\)。这是一个特殊状态(\(a_{i'} = b_{i'+j-i}\)),且 \(i' < i\) 且 \(i'\) 最大。然后 \(f(i, j) = f(i', i'+j-i)+i-i'\)。求这个 \(i'\) 可以预处理+二分。
分析复杂度。一个特殊状态会通过两个非特殊状态转移,而一个非特殊状态会通过一个特殊状态转移。所以总复杂度是特殊状态的数量,即 \(\mathcal O(n)\)。
C. 自行车
注意到,可以三染色的充要条件是,任意一个子矩阵的四个角中,有偶数个 \(N\) 和偶数个 \(Z\)。
或者说,视 \(N\) 为 \(1\),\(Z\) 为 \(0\),那么四个角的异或值为 \(0\)。
所以我们只需要确定第一行和第一列。剩下的满足 \(i > 1, j > 1\) 的 \((i,j)\) 都可以通过 \((1,1), (1,j),(i,1)\) 计算出来。
考虑枚举 \((1, 1)\) 的值。
对于一个满足 \(i > 1, j > 1\) 的且已经确定的格子 \((i, j)\) 而言,我们可以通过 \((1, 1)\) 和它计算出 \((1,j),(i,1)\) 的异或值。在这两个边界的格子间连边,边权是这个异或值,也就是 \(0/1\)。
然后变成了这个问题。类似二分图染色即可。
中途判是否合法。代码细节较多。