NOI2025 联合省选 一命速通
\(\text{Day 0}\)
2025 年的第一场 CCF 系列比赛。因为 WC 没得去。
由于从 NOIP2024 被神秘出题人差点搞退役了之后就一直没写代码,所以现在手生的要死。其实来打 NOISX 是没啥必要的,不可能从 rk26 翻到前 rk6,所以其实也就是来熟悉比赛环境,给 10-12 月的 CSP/NOIP 退役之战找找手感。
记得去年非正式选手打省选的时候好像就拿了 15 分,也是非常极限了。争取突破一下。
考试前一天在外面玩,晚上来开发区这边住的,怕当天走来不及。吃完晚饭都十点多了,回去敲了敲许久未碰的板子就睡觉了。
\(\text{Day 1}\)
早上出发到考场,门口全是的 24 和金普大队,你校这次 NOISX 就我一个人,于是直接蹲门口等进去了。
第一个进的学校,走去日新楼,开发区这边雾大的一批,进去坐一会就进考场了。进考场坐下刚开完三个文件,全场就被告知不允许碰电脑,不明白 NOISX 为什么还有这样的逆天规则,本来想提前敲一些板子上去的,这下没机会了。
监考通知说开考一个小时内不允许上卫生间,一堆人跑出去,后来还有人在考场喊自己肾虚的,也是没谁了。
准备开考,密码是 keeP*drEAm&iNg,让我们继续做梦。梦里随便进省队。
开文件简单浏览了一下三个题,一下就被 T2 的题目背景吸引到了:
我常常追忆过去。
生命瞬间定格在脑海。我将背后的时间裁剪、折叠、蜷曲,揉捻成天上朵朵白云。
云朵之间亦有分别:积云厚重,而卷云飘渺。生命里震撼的场景掠过我的思绪便一生无法忘怀,而更为普通平常的记忆在时间的冲刷下只留下些许残骸。追忆宛如入梦,太过清楚则无法愉悦自己的幻想,过分模糊却又坠入虚无。只有薄雾间的山水,面纱下的女子,那恰到好处的朦胧,才能满足我对美的苛求。
追忆总在不经意间将我裹进泛黄的纸页里。分别又重聚的朋友,推倒又重建的街道,种种线索协助着我从一个具体的时刻出发沿时间的河逆流而上。曾经的日子无法重来,我只不过是一个过客。但我仍然渴望在每一次追忆之旅中留下闲暇时间,在一个场景前驻足,在岁月的朦胧里瞭望过去的自己,感受尽可能多的甜蜜。美好的时光曾流过我的身体,我便心满意足。
过去已经凝固,我带着回忆向前,只是时常疏于保管,回忆也在改变着各自的形态。这给我的追忆旅程带来些许挑战。
我该在哪里停留?我问我自己。
不是哥们,我打的是信竞吗?现在出个题对出题人的文学造诣要求这么高了吗,让我看看是什么题能配得上这么棒的题目背景。一看题竟然是个数据结构,什么?数据结构复辟了?太好了,遥想自己曾经在 WC2022 的 T2 数据结构题中得到了 100 分,终于考到了我最喜欢的东西。
然后定睛一看竟然是个图论。不是哥们,现在出题都把图论和数据结构放在一起考了?对这题的好感值瞬间狂掉。感觉是我不可做的题目。毕竟自己图论在南外学了一假期,然后 CSP/NOIP2024 图论一分没得,并没信心。
再看感觉 T1 是我可以尝试写一写的题目,T3 又是个图论。服了。看完一圈有点数了,感觉会像去年一样死得很惨。没办法,去看看 T1 吧。
T1 的意思大概就是给你一堆 \(a_i,b_i\) 的范围 \([l,r]\),你自己任选向一个可重集里加 \(a_i\) 个 \(b_i\),求最终这个可重集里面的中位数的可能取值有多少个。

看 T1 数据范围,首先看到了 \(n\leq 4\) 这里,一眼八层循环(其实是九层)。但感觉好难写的样子,所以写了一发递归。但这细节也不少,感觉这个思路比正解都难写,调了巨大长时间,直到 1h4min 的时候才拿到这 20 分,复杂度是 \(\mathcal{O}(tn^8)\)。此时已经超过去年两天的分数了哈哈。
这复杂度也太水了,所以决定换个想法。我们不妨从答案入手,考虑枚举每个答案是否可以作为中位数。先考虑特殊性质 AB 均在的情况,我们可以直接对所有区间分成三类,第一类是右边界在当前值之前的,我们先管他叫小区间;第二种是当前值被包含在区间内的,管他叫容错区间;第三种是左边界在当前值之后的,管他叫大区间。接下来判断小区间的数量如果没超中位数限制,我们就可以看看能不能用容错区间补到中位数。非常简单的一个想法,复杂度是 \(\mathcal{O}(tn^2)\),不过只能过得去 2000,过不去 2e5。写完代码是 1h33min,此时期望得分 \(30\) 分。
有了这个我们考虑在刚才的想法上做一些优化,搞不满足特殊性质 B 的情况。我们同时扩大范围,把三种区间的答案范围都进行累加统计。然后不同情况判断取左边界还是右边界就行了,说起来很简单,实际上手玩写码的时候分类讨论的情况细节还是很多的,太烦了啊。写完此时 2h25min,时间一半多了,但感觉 T1 是个 shab 题,而我不会。
结果用写完的代码和暴力拍了 40 组,有 39 组都是正确的,但是有一组答案是 17 而我输出 18,那阵实在是不太想调了,因为调太长时间了有点累,而且这个精度我比较放心(?)。
开始狂炫阿尔卑斯软糖,上了个卫生间。
回来看 T2,T2 是维护一个查询和两个交换点权操作的题。

发现给了 \(20\) 分 2000/4000 的暴力分,想想怎么做,感觉是不是有环啊,得 tarjan 先缩个点变成 DAG,然后再搞吧。但是我是著名的 tarjan 使用不熟练选手。哎不管了不管了,水一发 dijkstra 上去看能不能混到分吧(但其实 bfs 就可以)。快速码完了 dijkstra 的板子,大概思路就是用 dij 判断是否有路,前两个操作直接暴力执行。调小样例五个对了三个,发现自己又记不住 0x3f3f3f3f 和 0x3f3f3f3f3f3f3f3f 了。
迅速调完小样例之后,大样例错在了 1324 行???这什么错误怎么一半错一般对的,看了半天才发现自己建图的时候多测没清空,调完就过了,跑了 \(0.58s\),发现本题时限是 \(6s\),CCF 机子飞快,稳的一批。比较疑惑自己是怎么过的。明明不是 DAG,dijkstra 的正确性没法保证啊。此时是 3h13min,本题期望得分 \(20\) 分,复杂度是 \(\mathcal{O}(tqn\log n)\)。
再往下看 T3,仔细一看问的是个排列?这场出题人是真喜欢图论壳子套东西。

看数据范围发现有一手 \(n\leq 10\)?排列加上这个范围不难想到是个 next_permutation 枚举全排列。这档分和图没啥太大关系,开个结构体维护小 Q 的二元对,边枚举边上个双层循环暴力对比就行了。写完是 3h40min,本题期望得分 \(8\) 分,复杂度是 \(\mathcal{O}(tm^2n!)\)。
干完这些活就去 check 三道题的 freopen 了。发现时间不太多了,就去想为啥 T1 会有精度误差,然后突然一下子就想到从大区间较少的方向看,如果可重集大小是偶数,那集合大小搞中位数不能取等,碰到这种情况会算多一个,改完就过了,此刻是 4h1min。
三个题其实写的这些分感觉都比较严谨了,感觉不会挂分,希望不会挂分。
突然感觉 T1 的数据范围难道是个区间二分答案?好久没写这种东西了,不想写也不太会写了。这些等 NOIP2025 前的那个假期在复习吧。
还剩 29min,发现对面的个位数号码选手 T3 一笔未动,感觉那应该是挺难的了。闲来无事,打了一把贪吃蛇,Length 打到 61 就死了。又打了一把俄罗斯方块,消了几行突然感觉旁边都在写代码我在玩有点愧疚感(?)。然后就给关了。但其实关上了我也没有啥事了,只能循环更换壁纸。
13:00,考试结束,Day1 期望得分:\(40+20+8=68\text{pts}\)。
Day1 打出这种表现还不错,四个月没碰 OI 了,意料之中。感觉 NOISX2025 Day1 的省排名会比 NOIP2024 的省排名要高。
出考场看 LA 群发现怎么都说第一题简单,好像真是神秘二分答案。不过也属于一个个人差巨大的题目,有人觉得签有人觉得难那种。显然我是后者。不过 T2 和 T3 好像我都打到了大众分?感觉 60% 以上的人都是 D1T2 + D1T3 = 28pts。不过南方朋友们好多都是 128pts,而我是 68pts。128 这个分数在 LN 可以冲击一下队线了吧我感觉。
后来和 @Hagasei 讨论,发现 T2 保证 \(u<v\) 了,相当于题里就是一个 DAG。甚至不用拓扑排序。我说 dij 怎么那么稳当。同时这也应该是我第一次在正式比赛里图论题拿分了,不错。
明天三道题拿个 400+ 就可以进省队了。开心。
明天拿个 12pts 就可以超过我 NOIP2024 的分数了。虽然 Day2 很难,但争取明天冲击一下 NOISX 三位数分数。
\(\text{Day 2}\)
有点忙,Day 2 简单补一点。
开考,看 T1,神秘推箱子题,感觉比 D1T1 难。32min 写了一手性质 B,发现这个按时间贪心就可以了。
接着想到一个神奇的做法,仍然按照时间贪,如果出现当前箱子和目标位置中间有k个箱子,就把这些箱子推到目标位置后面k个位置上。于是快速写完了这部分的代码,结果大样例过不去,但正确率还行?调了半天不是写代码的问题,遂感觉寄,应该是想法假了。
但是感觉正确率还比较可观?后来发现挂在可能有推箱子的时候原位置上有箱子的情况。不出现这种情况还是能过的。所以说这部分比较看命。
没办法去看 T3,发现 T3 好像可以暴搜,开了一发 set<deque<ll>>,然后调了 1h+ 才把巨大多的回溯调对。预期得分 \(8\) 分。
最后临结束前突然发现 T1 的性质 A 是送的,直接求一个 abs 就行了。
13:00,考试结束,Day2 期望得分:\([36,60]+0+8=[44,68]\text{pts}\)。
下午拿到代码包发现 D1T1 部分分原来的代码忘删了。挂了 \(10\text{pts}\)。
云斗数据:\(30+20+8+48+0+?=106+?\)
洛谷数据:\(30+20+8+?+?+?=58+?\)

浙公网安备 33010602011771号