? #6

还是我退火好。


全国青少年信息学奥林匹克联赛 CCF NOIP 2025模拟赛

链接:link
题解:link

时间: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 的对话


天依宝宝可爱!

posted @ 2025-11-25 11:50  little__bug  阅读(5)  评论(0)    收藏  举报