? #6
还是我退火好。
全国青少年信息学奥林匹克联赛 CCF NOIP 2025模拟赛
时间:4.5h (2025.11.25 07:10~11:40)
题目数:4
难度:
| A | B | C | D |
|---|---|---|---|
| \(\color{#52C41A} 绿\) | \(\color{#52C41A} 绿\) | \(\color{#BFBFBF} ?\) | \(\color{#BFBFBF} ?\) |
| *1600 | *1700 | *? | *? |
估分:[80,100] + 100 + 20 + 15 = [215,235]
得分:100 + 100 + 20 + 20 = 240
Rank:2/20
场祭
读题。
A 这不直接拿个 set 维护贪心一下就好了?怎么没过样例!哦没有注意到所有。
然后不会做了,单调性一点没有,也不能递推。不过注意到给了 80pts 的暴力分!于是把暴力打了,然后拼了个退火上去过掉了水完了的大样例。
调了会儿参,最终也是成功每次都输出同一个数了。
1.5h。
开 B,这个签!先容斥一下然后写 712 个滑动窗口就可以了。
开 C,数数题,打暴力,20pts 走人。
开 D,\(k=1\) 直接输出割边个数;\(k=2\) 枚举一条边,再跑一遍 tarjan 求剩下的图中的割边个数即可,复杂度是 \(O(nm)\) 的,不过似乎通过神秘分治可以做到 \(O(m \log m)\) 状物?总之先写暴力,小样例过了,但是最大的那个样例 WA 了!
而且根本调不动,没有可以手推的错误数据(怎么着都 hack 不掉),实在看不出来错哪了 ww
寄。不过起码还有 \(k=1\) 的 15pts 吧。
补题
欸 A 退火草过去了。不过有人 \(O(n^2)\) 加一个最优性剪枝就草过去了??
看了题解,还真是三分啊,考场上一秒否了单峰性来着。但是这对哪了呀?
补 C,50pts 做法怎么这么简单?就是考虑如何 \(O(n)\) 地求一个长度为 \(n\) 的序列 \(a\) 的本质不同的子序列个数。自然是 dp,直接令 \(f_i\) 表示前 \(i\) 个位置的不同子序列个数,转移考虑容斥,首先总方案数为 \(2f_{i-1} + 1\)(即考虑 \(a_i\) 选不选),不过可能出现 \(a_i\) 在前面出现过的情况,要减去。考虑记录一个 \(lst_{a_i}\) 表示上一个为 \(a_i\) 的数的位置,那么重复的部分就是 \(f_{lst_{a_i}-1}+1\),因为 \(i\) 和 \(lst_{a_i}\) 作为尾字符出现重复意味着前面的位置重复了,即减去的部分需要满足在后面拼上 \(a_i\) 后相同,这也是 \(lst_{a_i}-1\) 而不是 \(lst_{a_i}\) 的原因;\(+1\) 是为了减去单字符。
例题是 SPOJ 2416。
套到这个题上,就有了 \(O(2^n)\) 的 50pts 做法了(最终字符串长度是 \(O(2^n)\) 的)。
正解是矩阵优化另一个 dp,比较困难,不补了。与 gpt 的对话。
天依宝宝可爱!

浙公网安备 33010602011771号