NOIP 2025 游记

· · 生活·游记

:::align{center}

时不可兮再得,聊逍遥兮容与

::: :::align{right}

——NOIP 2025 游记

::: :::epigraph[——《庄子·山木》] 无誉无訾,一龙一蛇,与时俱化,而无肯专为;一上一下,以和为量,浮游乎万物之祖,物物而不物于物,则胡可得而累邪! :::

谨以此文纪念我 500 多日的 OI 生涯。

赛前·日记(伪)

Day -14

上午考完期中考,最后一门考的技术。然而信息技术的第 13 题因大意痛失 3 分(贪心贪错了,连样例都写错),成功拿下我信息技术的历史最低分。我期中考扣的分能加到我 NOIP 成绩上吗?

话说这个《浙江省 9+1 高中联盟 2025 学年第一学期高二年级期中考试》的通用技术出的就是一坨,我花了 10 多分钟才猜出设计题要让我们设计什么东西。(考阅读理解的来了)

Day -13

秋游。本想请假去上竞赛,但失败了。去的路上把英语作业写完了,回来的路上在思考 P13534 [OOI 2023] 回家的路,然而并没有想出来。

Day -6

开始赛前停课集训。打了场梦熊 NOIP 2025 模拟赛,结果意外中了幸运奖,10 块钱。(这个不会从我 NOIP 2025 的运气里扣吧?)

因为是周六,晚上回家开始改装我的电脑(其实是升级硬盘)。双十一买了块致态 TiPlus7100 2TB 的硬盘,打算给我电脑换上,顺带装个 Kubuntu Linux 系统(我已经忍 Windows 很久了)。因为我的笔记本电脑只有一个硬盘位,所以迁移完数据后,拆盖,结果发现固定原本硬盘的螺丝拧太紧了,与螺丝斗智斗勇 2 个小时,最终以失败告终。最后呼叫外援拆下来了。换上新硬盘后顺利开机,然而已经太晚了,没有时间装新系统了。

Day -5

早上先打一场信友队的 NOIP 模拟赛,中午吃老板请的午饭(可能是我最后一次在信竞教室吃老板请的饭了)。然后给我的笔记本电脑装上了 Kubuntu Linux 系统。

Day -3

下午老板带我们出去爬山(体育运动?),然而老板从未爬过,也不知道正确的到山顶的路。所以起先是我们一队列人在山里跑 DFS,时不时剪枝优化,变成 return 回去,最后成功变成了一群野指针在山里乱跑,幸亏最后没有 RE

爬完山(并非爬完,没找到去山顶的路),老板带我们去吃了顿饭(请学生吃饭?),回到学校继续配置我的电脑+写水题。玩 OI 教练模拟器玩的。

Day -1

老板请奶茶,然而我挑了半天也没想好喝什么,最后随便点了杯珍珠奶茶。晚上在整理我的模板。

PS: 然而赛后发现,我整理的模板没有一个用上的。(前缀和除外,但我觉得这玩意不用整理也会……)

Day 0

上午打印我排版好的模板集(肆意剥削信竞教室的打印机),同时看了一下信友队的 NOIP 模拟赛,嫌弃这个模拟赛就是搞心态的。

PS: 赛后发现信友队出得还是太收敛了……

中午 12:30 从学校出发,耗时 4 个小时到达杭州,然而刚好赶上杭州的下班高峰期,好堵……

晚上老板带我们去旁边的商场逛吃,路过阿里巴巴,第一眼误认为是学校……在商场和 floaya、Awsdkl、creeper486 三位大佬一起吃烤鱼,吃撑了。(学校发了 160 元补助金,但实际上只要管这一顿饭,预算太充裕了!)

在酒店打了几个模板练练手,然后有点小失眠。

Day 1

4:30 醒了一次,又睡过去了。6:30 起床,吃早饭,然后一群人浩浩荡荡地出发步行前往杭师大(依旧体育运动)。

在考场门口见到了全省各个学校的大佬,膜拜 Orz。

赛时

T1 开题后一眼看出可以把 $2$ 颗糖果捆绑后贪心。但是敲完代码后测大样例,发现样例 #6 一直过不了,调了半天也没调出来,反复尝试 hack 自己的代码,但是失败了。最后搞了 $2$ 个多小时,发现时间快要来不及了,遂放弃,转战下一题。所以最后我的代码是连样例都没过的。(为下文做铺垫 $\times 1$) 我以为我 T1 可能只能得三四十分,这时候心已经有点慌了,赶紧开 T2,草草读完题面,发现基本没什么思路,就开始写暴力代码。(为下文做铺垫 $\times 2$) 花了点时间写完暴力,一测样例,发现错了,简单修改了一下,发现依然不对。但是这时候心里已经很慌了,再加上时间只剩 $1$ 个小时多一点,于是放弃暴力。(为下文做铺垫 $\times 3$)快速写了个全部输出 $0$ 和 $2^{n}$ 的代码后,连样例都没跑,就去写下一题了。(为下文做铺垫 $\times 4$) T3 开题之后感觉没什么思路,暴力也不大会打(这时候心态已经崩了,脑子也转不动了,纯粹靠着信竞生的本能在写代码),瞎搞了一篇看起来就没有一点正确性的代码就收工了。 做到 T4 的时候已经只剩 $30$ 分钟不到了,发现暴力思路很清晰,直接开始打暴力。但是这时候脑子已经糊成一团,稀里糊涂地写完 $O\left(n^{3}q\right)$ 的暴力,测了一下样例,发现输出对了,收工。(为下文做铺垫 $\times 5$) 最后 $10$ 分钟检查了一下文件格式和 `freopen`。出考场的时候腿都是软的。 ### 赛后·打完就退役 13:00 考完,老板带我们去吃烤肉~~散伙饭~~,还有好多在杭州的学长(学姐?)来看我们。 15:30 出发回台州,一路上都在亲切问候出题人。19:40 到学校,好累,感觉身体被掏空。 :::info[CCF 批斗大会]{open} 我之前在 CSP-S 2025 考完后说:“传奇 CSP-S 2025,难度严格难于去年 NOIP。那岂不是今年 NOIP 要严格难于去年 NOI 了?”虽然后来 CSP-S 2025 T1 降黄了,没有难于去年 NOIP,但今年 NOIP 真的难于 NOI 了! 刚考完的时候,洛谷评的是“黄黑黑黑”,后来降为“黄紫黑黑”。但是无论如何,都比 NOI 难。对比 NOI 2025: ||NOIP 2025|NOI 2025 D1|NOI 2025 D2| |:-:|:-:|:-:|:-:| |比赛时长|$4.5$ 小时|$5$ 小时|$5$ 小时| |题目数量|$4$ 题|$3$ 题|$3$ 题| |题目难度|黄紫黑黑|绿黑黑|蓝黑黑| 可以发现,如果去掉 NOIP 2025 T1,那么后三题的难度是比 NOI 2025 难的。所以说我们不仅要比 NOI 多做一道题,难度还更高,时间甚至更少! CCF 是看我们这些普通选手没有机会打 NOI,所以特意把 NOIP 调成 NOI 难度(甚至更高)来让我们体验一下 NOI 吗?原来 NOIP 是 NOI Plus 啊。 ::: ### 成绩·花式挂分 >score:$100+0+0+0=100$。 周三下午,在信息课前开网的时候,我照常登录洛谷账号,打算签个到(抽出一个“宜贴贴”),看了一眼讨论区,震惊地发现大家都在讨论成绩,惊叫:“啊?成绩出啦?”急忙登录系统查成绩(手有点小抖)。看到成绩后第一反应是:什么!我第一题居然拿了满分!下一秒:什么!怎么后面三题都是 $0$ 分!这个结果是我万万没想到的。 当场去下载了浙江省的选手代码公示和官方评测数据,简单看了一下自己的代码,没发现什么明显的问题。坐不住了,直接溜去信竞教室仔细检查自己的代码。 #### 1. 我不知道我为什么做对了 首先是 T1。如果你现在拿样例去测 ZJ-0300 的 T1 代码的话,你会发现样例 #6 是没过的;但是拿官方评测数据测的话,你就会发现全部通过,拿了满分。~~CCF 拿随机数造的数据。~~ ```cpp #include<bits/stdc++.h> using namespace std; const long long inf=0x7fffffffffffffff; struct node { long long x,y,z; bool f; }a[100010]; long long z[100010]; int main() { freopen("candy.in","r",stdin); freopen("candy.out","w",stdout); int n; long long m,minn=inf,ans=0; scanf("%d%lld",&n,&m); for (int i=0;i<n;++i) { scanf("%lld%lld",&a[i].x,&a[i].y); a[i].z=a[i].x+a[i].y; if (a[i].z<minn) minn=a[i].z; } const long long mid=minn>>1; sort(a,a+n,[](node a,node b){return a.x<b.x;}); for (int i=0;i<n;++i) if (a[i].x<=mid) ans++,m-=a[i].x,a[i].f=true; else break; ans+=(m/minn)<<1; m=(m%minn+minn)%minn; for (int i=0;i<n;++i) if (a[i].f) z[i]=a[i].y; else z[i]=a[i].x; sort(z,z+n); for (int i=0;i<n;++i) if (z[i]<=m) ans++,m-=z[i]; else break; printf("%lld",ans); return 0; } ``` 确实,从概率和期望的角度分析,我的代码在随机生成的数据下输出正确的概率是很高的。但是,机房里有些通过了全部样例的只能拿 $95$ 分甚至更低。老板说:“看来这个测试数据很合你的程序的胃口。” 但是,运气是守恒的。 #### 2. 快速幂模板写错了 之前说过,我在赛时匆匆输出了 $2^{n}$ 后,连样例都没测。所以,现在请欣赏 ZJ-0300 T2 的快速幂: ```cpp inline long long qpow(long long a,long long k) { long long ans=1; while (k) { if (k&1) ans=ans*a%mod; a=a*a%mod; } return (ans%mod+mod)%mod; } ``` 可以发现:`k>>=1;` 跑哪儿去了?如果我赛时跑一下任何一个样例,就会发现我的程序会死循环。 T2 的 $4$ 分特殊性质分没了。 #### 3. 数组下标越界 赛时我打完 T4 暴力后,发现样例 #1 过了,于是收工。当时没有想到要挂会机去跑一下稍大一点的样例,也有我写程序时不够警觉的原因。我的 T4 暴力是选择先枚举区间长度,再枚举区间左端点。显然,在枚举左端点的时候,很容易忘记枚举的上限需要扣除区间长度。于是: ```cpp for (int i=L;i<=R;++i) { for (int j=1;j<=n;++j) { const long long w=sum[j+i-1]-sum[j-1]; for (int k=j;k<=j+i-1;++k) if (w>maxn[k]) maxn[k]=w; } } ``` 数组下标越界,然而样例 #1 太弱,越界了也没出错。 T4 的 $5$ 分暴力分又没了。 #### 4. 读错题了 写 T2 的时候,由于 T2 的题目背景是衔接 T1 的,受 T1 的影响,我直接把每种糖果当成有无限颗了。也难怪我考场上写暴力没写出来。 :::warning[警示后人]{open} 1. 写完程序后,无论如何都要跑一遍样例。 2. 暴力代码也需要去跑一下相对大一点的样例。 3. 仔细读题。 ::: ### 思考 赛前,老板专门找到我,说我有点太紧张了。现在想想,可能确实如此。这场比赛,我发挥得确实不是很好,失误有点多了。如果没有那么紧张,也许能取得更高的分数。如今 $100$ 分的成绩,可能可以达到全国二等基准线,但要在浙江省拿到二等奖大概没戏。 NOIP 对于一些大佬来说,只是进入省选和 NOI 的门票;但对我来说,可能已经是 OI 的终点。明年虽然还会参加 NOIP,但状态肯定不好,毕竟高三了也不可能再有很多时间去训练,NOIP 考完后,紧接着就是首考。上大学之后,我还会参加 ACM 吗?也不好说。 NOI 金牌、保送清北的辉煌只能是虚无缥缈的梦想。就好像今年的试题解压密码 `!noip@Nov29,2025:dream` 一样,对一些人而言,dream 是即将实现的“梦想”;对我而言,它或许只是“梦一场”。 这段从零开始的旅程,不过 $500$ 余日。能够拿到 CSP-S 二等奖高分(没拿过绿钩就拿蓝钩了),比起那些自初中甚至小学便深耕于此的同行者,我或许走得快了些;但置身于真正的天才之间,我依然望见那道遥不可及的天堑。有时也会想,如果更早出发,路途是否会不一样?可时间从不回答假设,它只沉默地丈量每一步是否踏实。 “对信息竞赛有浓厚的兴趣”——这句当初看似最轻的准入条件,如今回味,却成了最严格的要求,而时间,就是最公正的测试。它筛去的不是能力,而是能否在日复一日的调试、思考与挫败中,依然保持最初的那份热爱。兴趣不是起点,而是穿越时间之后,依然没有熄灭的那团火。 在这条狭窄的路上,有人中途转身,有人加速远去。而坚持,或许并不总关乎最终抵达哪里,更像是对自我某种可能性的忠诚——我想知道,如果尽力走到自己能走的最远处,那里会有什么风景。纵然没有金牌与保送的桂冠,这一路被算法锤炼的逻辑,被失败打磨的心性,以及那些与志同道合者并肩作战的深夜,都已悄然重塑了我的一部分。 OI 终究会落幕,机房也会迎来新的面孔。但这段时光教会我的,或许正是在充满限制的世界里,如何清醒地选择所爱,并坦然承担这份选择带来的一切。就像喜欢上了一个人,哪怕明知希望渺茫,仍然坚定不移地去尝试;无论结果如何,只有去尝试过、努力过,才能让自己的青春少一些遗憾。它像一场静默的洗礼:重要的从来不是结果是否辉煌,而是过程中你是否真正活成了自己愿意成为的模样。 路途至此,聊以一词为记: >:::align{center} >#### 江城子·信竞有感 >少年何惧路苍茫,历星霜,淬锋芒。寒窗孤影,星月伴秋霜。百转千回终不悔,山海阔,意飞扬。 > >一朝试罢路悠长,未登堂,亦荣光。折戟犹歌,残梦也铿锵。信有云帆济沧海,风起处,再启航。 >:::