ZR 2025 NOIP 二十连测 Day 6
啊啊啊第一次上 200 /oh
25noip二十连测day6
链接:link
题解:题目内
时间:4.5h (2025.10.21 13:40~18:10)
题目数:4
难度:
| A | B | C | D |
|---|---|---|---|
| \(\color{#F39C11} 橙\) | \(\color{#52C41A} 绿\) | \(\color{#3498DB} 蓝\) | \(\color{#BFBFBF} ?\) |
| *1200 | *1900 | *2100 | *? |
估分:100 + 72 + 35 + ? = 207 + ?
得分:100 + 72 + 35 + 0 = 207
Rank:61/131
场祭
读题。
开 A,发现似乎很简单,注意到答案一定形如 11110000101010 的形式,就做完了,直接枚举即可。
先不写了,应该是很好写的,继续开 B,显然是 dp,但是发现无论怎么样都逃脱不了要记录两个 \(O(n)\) 或 \(O(V)\) 的状态,于是放弃思考,去进行一个部分分的想,随便搞搞写出来了一个 \(O(nV^2)\) 的 dp,非常优秀,足足有 72pts。
写写写,过样例了。
10min 把 A 写了。
甚至只过了不到 2h。所以有足够的时间去打 CD 的暴力和特殊性质了。
然后发现似乎只会暴力,D 甚至不知道暴力对不对,所以先把 C 的暴力打了。然后继续研究 C,发现可以转化成把所有满足 \(a_i + a_j \ge d\) 的 \((i,j)\) 连边,得到一个图,求删掉最少条边使图成为一个二分图,或者说在二分图左右两边中间保留尽可能的多的边。这样似乎 \(d \le 3\) 就可以做了,可以发现实际上只有 \(0,1,2,3\) 这 \(4\) 种不同的点,然后 \(3\) 一定会产生贡献,所以把 \(1,2\) 分到两边一定是最优的,而 \(0\) 显然放在 \(3\) 少的那一边更优。
注意到是 \(d \le 3\) 而不是 \(d = 3\),所以还需要把 \(d = 0,1,2,3\) 都分讨一遍 /tuu,不过还好,因为 \(1,2\) 都可以直接枚举,毕竟 \(n \le 1000\) 嘛。然后写到 \(3\) 的时候发现过不去样例,于是不想了直接枚举去了,算了下 \(5000 / 1000 \times 333^3 \approx 1.8 \times 10^8\),常数不大 1s 挺能过的,写了之后对着暴力拍出来几个 corner case 就过大样例了。
D 直接爆搜,过掉了 3 个样例,应该能有一些分。
补题
哦 D 看来数据比较强,都 T 飞了呢。
补 B,好吧是注意力题。有一个朴素的 dp 就是令 \(f_{i,j}\) 为最后一个为 \(a_i\),倒数第二个为 \(a_j\) 的答案,然后发现转移的时候只需要考虑新的 \(a_k\) 与 \(a_j\) 是否相等,所以只需要记录最大值和次大值即可,这样就变成了 \(O(n)\) 的状态和单次 \(O(n)\) 的转移。
状态显然已经做到最优了,只考虑优化转移。根据人类直觉,我们并不会从太远的地方转移,具体地,可以发现如果我们选了一段形如 XXabcdeXX 的序列(X 表示任意已选数字,abcde 分别为不同的未选数字),那么至少能在 abcde 中再选一个,一定会更优,因为只需要保证选择的数和每个 X 都不同就可以了,所以这样一定是合法的。
所以,对于 \(f_i\) 我们只需要从前面 \(5\) 个 \(a_j \ne a_i\) 且 \(a_j\) 互不相等的位置转移,并且所用的 \(a_j\) 都是在 \(1 \sim i-1\) 中最后一次出现。于是转移就是 \(O(1)\) 的了。
补 C,trick++!
考虑让我们难办的东西到底是什么,实际上就是无法确定哪些点之间该有连边,哪些点没有。所以能不能构造一种方式,使得连边变得好确定?
首先有一点观察:如果按照 \(\lceil d/2 \rceil\) 来把所有数划分为大点和小点,那么大点之间一定两两连边,小点之间一定没有连边。
trick:考虑按照这样的顺序排列:\(d,0,d-1,1,d-2,\ldots\),然后惊奇地发现,每个大点只会与之前的大点连边,每个小点也只会与之前的大点连边!
所以直接 dp 就可以了,令 \(f_{i,j}\) 为前 \(i\) 个数,放在第一组的大点有 \(j\) 个的最小同组边以及方案数,转移是平凡的,考虑大点还是小点、放在哪一组即可。
天依宝宝可爱!

浙公网安备 33010602011771号