拓扑 AC 2025 线上 NOIP 联测 #3


[2025线上NOIP联测第三阶段] 模拟赛 3

链接:link
题解:link

时间:4.5h (2025.11.26 07:10~11:40)
题目数:4
难度:

A B C D
\(\color{#52C41A} 绿\) \(\color{#3498DB} 蓝\) \(\color{#3498DB} 蓝\) \(\color{#BFBFBF} ?\)
*1700 *2100 *2200 *?

估分:[60,100] + 25 + 0 + 25 = [110,150]
得分:100 + 25 + 0 + 25 = 150
Rank:2/35


场祭

读题。

感觉好困难,这才是 NOIP 真正难度吗 /ll

开 A,先是注意到答案只可能是最低价或离最低价最近的满减方案,然后考虑怎么求着两个东西。但是思考 20min 想不出来 w,准备打暴力的时候忽然发现值域只有 \(10^6\),那是不是可以根据值域来做!注意到相同 \(a_i\) 的满减方案只保留 \(b_i\) 最大的即可,而每个满减方案最多会出现 \(V/a_i\) 种情况,那么算一下 \(\sum _{i=1} ^{5 \times 10^5} 10^6/i < 1.4 \times 10^7\),可以直接枚举!

具体地,考虑用一个满减方案,那么就是要求 \(\min _{i=1} ^m \{ w - \lfloor w/a_i \rfloor b_i \}\),于是要对于每个 \(w\)\(\lfloor w/a_i \rfloor b_i\) 的 max。考虑到 \(\lfloor w/a_i \rfloor\) 的结果只会在 \(a_i|w\) 的时候出现,于是按照这个枚举,然后做一遍前缀 max 即可。

这样,最低价就做完了。但是还有最低价最近的满减方案,不过也是容易算的,要求 \(\min _{i=1} ^m \{ \lceil w/a_i \rceil (a_i - b_i) \}\),那还是用上面的方法,最后改成后缀 min 就好了?

写写写,发现不过样例,才注意到后缀 min 是不可以的,因为可能会出现 min 从位置 \(p\) 转移,但是 \(p>w_{\max}\) 的情况!快速修补,发现直接改成区间 min 就可以了。因为 ST 表空间爆炸所以用了线段树。

测大样例,怎么跑了 2300ms+ /jk,这也没有什么常数大的地方啊,难道是我 vector 不断 emplace_back 导致的?reserve 了之后也没有变化啊?改成开内存池预处理因数反而跑得更慢了 /yun

考虑到机房电脑比较 fvv,线性求逆元只能跑 9e6,于是相信一下评测姬吧。(这句话好奇怪?)

怎么 2.5h 了!/jk

快速看 B,数数题而且没时间果断放弃了。发现大概可以拿 40pts 的部分分。写写写发现 \(a_i = i-1\) 的做法是假的,遂瞎写了个 dp 上去。又把性质和暴力对拍拍出来 712 个错误,才确认了 dp 是假的。

不过还是能有 25pts 的。

开 C,似乎会一个 \(n \le 50 , k_i \le 2\) 的部分分。开 D,欸这个部分分多!前两个子任务白送的啊,判断奇偶性就做完了。

迅速把 D 写掉,然后去写 C,发现答案只能是 \(v_r\)\(2v_{r-1}\)\(v_r + v_{r-2}\)?然后大样例过不去,没时间调了 /ll


补题

补 B,嗯,确实是那种看了题解认为不难但是自己根本想不到的数数题。

这不无解了 /ll

补 C,是喜欢的串串题(?)要是 swap(B,C) 差不多能切掉。。

先是发现结论:选的一定是前缀,因为如果选了一个并非前缀的串 \(s_{l \sim r}\),既然 \(s_{l \sim r}\) 合法,那么 \(s_{1 \sim r}\) 一定合法。

然后先跑一遍 KMP,发现在 fail 树上,如果选了一个节点 \(u\),那么这个节点的所有祖先和后代就都不能选了。于是直接选前 \(k\) 大的叶子即可。

至于如何保证复杂度,离线下来就能直接上线段树了。


天依宝宝可爱!

posted @ 2025-11-26 12:06  little__bug  阅读(23)  评论(0)    收藏  举报