NOIP 2025 游记
by_ty
·
·
生活·游记
:::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}
>#### 江城子·信竞有感
>少年何惧路苍茫,历星霜,淬锋芒。寒窗孤影,星月伴秋霜。百转千回终不悔,山海阔,意飞扬。
>
>一朝试罢路悠长,未登堂,亦荣光。折戟犹歌,残梦也铿锵。信有云帆济沧海,风起处,再启航。
>:::