逆风生长:我的CSP-J 2025复赛24小时
:::epigraph[——余世存《时间之书》] 年轻人,你的职责是平整土地,而非焦虑时光。你做三四月的事,在八九月自有答案。 :::
:::align{center}
序曲:播种之时^*
:::
2025年九月下旬,我侥幸突破普及组
10月31日,这天的晚自习是体育课,我们欢声雀跃的下楼,老师不让在教室留人,我也不得不下去。楼下跑完1.5公里后,体育老师让我们放松一节,自由打篮球。我的好朋友邀我过来打,我应声拒绝,转头走到了一楼教室窗外的草丛排水管旁上,借着教室的灯光我打开了笔记本,巩固一些最基本的C++语法知识。我独自蜷在草丛里,借着教室透出的微光翻看笔记。不远处,同学们在篮球场上挥洒汗水,欢声笑语阵阵传来,而我只能压下心中的羡慕,继续与我的笔记为伴。
突然,我班有一个同学(自诩为“电脑大神”,其实只会打开cmd,切到C盘,键入tree C:,展示自己所谓黑客的实力)走到我的旁边,不假思索地说一句:“学C++脑子变笨,我都学Java和Python的,C++都落后于时代了。”一股热血瞬间涌上脸颊,我按捺住心头的波澜,只回应道:“别对C++抱有偏见。即便功能不如后者丰富,但编译型语言的效率,是解释型语言难以比拟的。”他茫然地回了一句“听不懂”,便转身离去。我深知争论无益,抱起笔记,默默走向另一处安静的角落。
:::align{center}
征程:奔赴大连
:::
18点半放学,我背着沉重的书包,逆风骑回家里。我又翻开了我的笔记本,复习二分答案和贪心算法。20点半赶往高铁站,搭上最后一班列车,前往沈阳。在路上,我趴在玻璃上,望着窗外,家家户户的光点瞬息飞过,远处的三叶风车亮着诡异的红色防撞灯。不知过了多久就到沈阳站了。尽管已经是深夜,可22点的沈阳站依旧嘈杂,人人都在赶往自己对应的检票口,我心中莫名升起惆怅之感。我与母亲抢了个座位,啃着苹果,读着《一本通》
子时三刻,我的母亲慌忙叫醒了我,此时前往大连金州的火车开始检票。令我没想到的是,在这夜深人静的时候,仍然有许多人随我一并检票。站台上,凛冽的寒风像是刀片一样刮着我的脸庞——东北的深秋是如此寒冷。登上火车,人们便自觉地安静下来了,睡眼惺忪的我摸着黑,走到属于我自己的床铺。
我隔壁的床铺是一位大姨,他在那里静静的坐着,打量着我,我也打量着她——我们俩就这么尴尬的对视着。后来我在整理自己的外套准备掀被睡觉时,无意露出了自己的准考证,她打开了手机的手电筒,照向那张纸(你这让人很没有隐私的),笑着问我:
“小伙子,你几年级了?”
“初三。”
“这什么入门级啊?”
“阿呀,一个计算机考试罢了。”
“你考计算机有什么用,中考又不考。”
“阿姨,是这样的,这个它能……”
“小伙子,我劝你以学习为重,别整这些什么有的没的。”
我顿时羞赧,原本想说“能加综合素质评价分,学的特别好的能保送清北
随着火车的撞轨声,心里嘀咕着:火车的撞轨声节奏分明,我在心中默念:今天是万圣夜,愿CCF前两题手下留情,第三题也能留有余地。为了托福,我学着那些学长所念叨的“rp++
我做了一个梦,一个面部由代码构成的人形向我求助,声音机械而模糊。我问他名字,只听清一串乱码“%!@#&”;他交代任务,语句更是支离破碎。当我说出“我不会”时,他脸上的代码骤然扭曲,用一个out文件狠狠扇了我一记
“欸欸欸,马上到金州了,醒醒!”
“拍我脸干什么!”
“拍你叫你也不醒,跟个猪似的睡着,睡相也不好。”
我低头一看,好一个“娇儿恶卧踏里裂”,被褥几乎全掉在了地上。慌忙整理时,左小腿突然抽筋,一阵剧痛让我几乎叫出声来。“真是开了个坏头。”我懊恼地想。下车后,我们沿着漫长的地下廊道逆风而行,四站台到出口的五百米路,因腿上的伤痛而显得格外遥远。
你见过凌晨四点的金州火车站吗?出站口被接站的人群围得水泄不通,重逢的喜悦驱散了夜的寒意。而这份热闹,更反衬出站前广场的寂静——只有零星几盏破败的路灯,映照着空旷的黑暗。我们很快在车站旁找到一家钟点房,总算能好好睡上一觉了。
:::align{center}
决战:前往考场
:::
6点30分,我们起床了,弄完退房手续后,找了一辆出租车,前往大连大学。
司机是一位打扮精致的阿姨,刚上车我们就开始聊天。不像之前的大姨,这位阿姨鼓励我拿个一等奖,她说她儿子之前也整的信奥,NOIP拿了个省二等奖。我并不知道她是在吹牛,还是在谦虚,但是我仍然感到震撼,增强了我的信心。
出租车沿着大黑山的“测地线”,一路绿灯,开到了大连大学门口,此时已经7时30分,在37分,我在洛谷发了一个动态,内容是“加油”,以激励自己,也激励和我一个编程(或是说竞赛)班的同学,更激励我们这些同道中人。
步入大连大学,柏油路上都是红色的枫叶,枫叶在我的脚下回旋,在我的身后形成一道印记,好像在鼓励我红红火火。我看见一些来自大连、沈阳的初中生校队,身着校服,快步向前走,我感到遗憾——我身居小城市,哪有这些丰厚的教学资源。
日新楼考场外,已是旗帜招展。各训练队的教练们发放着宣传单,上面罗列着辉煌的荣誉,这虽是一种营销,却也让我看到了更广阔的世界。
走进日新楼,其右侧是红色似叶扇状的大铁皮,写满质能方程和牛二定律,左侧是被公告栏挡住的元素周期表,前方是一些荣誉榜考研榜之类,左右两侧记得是计算机实验室,即考场入口,其上的LED屏幕赫然写着红色大字:辽宁省CSP-J|2025第二轮认证。
过了一会后,监考老师把我们带到了外面,拿起牌子,写着考场对应的考号,我在第三考场——其实这是能预料的,在辽宁,是同姓氏的人准考证号数都大差不差,连号的——监考老师在开考前二十分钟领我们进入考场,家长们都在鼓励孩子们,我母亲也不例外。
通过严格的“安检”后,我将书包和电子设备留在门外。虽然这是常规流程,但在我心中却激起了波澜。考场里有四百多台安装着Ubuntu 20.04的改版NOI Linux 2.0,桌面壁纸都是企鹅Tux,显示屏右上角有着密密麻麻的大字,不像其他省份(如山东),我们的电脑直接装了个系统,不是虚拟机。在考场四个角有大混凝土柱子,分别写有1、2、3、4区的蓝色表识,如此显眼。
我找到自己的座位,那显示屏上显示的是电脑的内网IP、考生姓名和基本考纪,桌面上有着一张图片文件,其内容是解压缩包教程,还有一个题目压缩包。我右边的右边有个初三的鞍山同学,他在初赛的时候就是坐在我后边的,我与他寒暄了几句,问了他月考的成绩。“同学们安静,都就座!”喇叭的响音着实吓了我一跳,我抓紧回了座。主考官强调说禁止改动电脑设置,否则按违纪处理,禁赛三年,全国通告。我并不清楚为什么会有些许议论声,正常来说不会有心智不成熟的小学生了,我只知道听话就好,不得恣睢
:::align{center}
赛时:紧张的210分钟R——帮助小R
:::
主考官在我们的桌面上新建了一个对应准考证号的文件夹,过了一会儿,考试正式开始,前后两个大屏幕显示了压缩包密码,密码是“上善若水”拼音的变形,又加了个井号,我在心里笑了一下——CCF最近是看《道德经》了。
我点开题目pdf和code::blocks软件,牢记老师的赛前提示,在主函数里写上freopen,分清"r"、"w"开始读题。
与往年不同的是,CCF出了一个情景化试题,非常实际,感觉回到了学校的考试。第一题的主题大意是帮小R处理字符串,挑出其中的数字,由从大到小排序,就满分了。但是即使如此,仍然出现了意外——我数组开小了。最后一个将进一百万位纯数字样例,终端出现了一个s打头的单词和一个“
当时我用来存数的是int a[100005];,半小时后我才发现问题,原来是没仔细读题啊,瞬间火急攻心,寻思怎么能犯如此低级的错误,此时已经浪费一个小时。
第二题是帮小R告诉她坐在按成绩蛇形排列考场座位的位置,而且人人成绩不同,当时察觉到要找数的时候我突然欢喜——我以为这用到二分查找,正好复习了,结果发现数据规模小到超乎想象,a[1]值在排序后的位置lo所对应的行、列位置。时间复杂度应该是
第三题是一个很不错的题,我也看出来这是道前缀和的变形和贪心算法,读题和初步思考推演半小时后,我就在想:
“是不是存储异或和用个数组p,写个表达式p[i]=p[i-1]^a[i]不就ok了,然后再算一下哈哈,聪明如我!”
结果是,我卡在如何算区间异或前缀和了,后来我推导动态转移方程,发现这一步始终绕不过去。最后没时间了,无奈放弃,蒙个结果,输出1,打上注释“我不会”。
引用一下这篇题解
大意是选择尽可能多的不相交区间,使得每个区间的异或和都等于
k 。设前缀异或数组:
s_i= a_1\oplus a_2\oplus\cdots\oplus a_i 其中
s_0=0 区间
[l,r] 的异或和可表示为:a_l \oplus \cdots \oplus a_r=s_r \oplus s_{l-1} 要使区间
[l,r] 的异或和等于 k,需满足:~~~~~~~~~~s_r\oplus s_{l-1}=k\Longleftrightarrow s_r=s_{l-1} \oplus k ~~~~~~\textcolor{magenta}① 原问题转化为:在
s_0,s_1,\cdots ,s_n 中寻找尽可能多的下标对(p,q) ,满足:
p<q s_q=s_p \oplus k - 对应区间
[p+1,q] 互不重叠可以用贪心来做,哈希表记录各前缀异或值最近出现位置,然后按照条件选取区间即可。
我就卡在
\textcolor{magenta}① 处了,太可惜了第四题我只知道这是动态规划,但面对题目,我毫无头绪,同样只能输出1。
说实话,我认为我们的考场纪律不好,考试的时候一直有嗡嗡声,然后有人动不动“老师”“老师”的,对我有极大的精神打击。然后还有人问测试数据打不开怎么办,老师说关于编程问题不予解答。其实用vscode打开文本就行了,比内置的快,我实测过。然后我左边那位同学一直在那里东张西望,眉飞色舞的,我怀疑他在抄,但我没证据。
最后仔细检查后,终考的铃声响起,我磨磨蹭蹭的离开座位,带着些许遗憾走出考场。
门口,一缕清风吹在我的脸上,那是凉爽的,树叶萧索,沙沙的响着,天空是格外的蓝啊——我真的在那210分钟醒来了吗?
:::align{center}
归途:总结与反思
:::
出考场时正巧碰见了我的同学
“虽然犯了些低级错误,但相比去年,我的思维能力确实进步了。许多本该拿下的题目失分,说明题量练习不足,临场应变能力欠缺,心态也不够稳定。归根结底,还是平时学习不够扎实,细节抓得不牢。路还很长,仍需努力。”
他说:“俺也一样。”
我问他第一题怎么做,他突然激动的问我,输入为0的情况判断了吗,我心里发怵,哎呦忘做了。他说我第一题顶多拿96分了,我说:
“我希望CCF把0的特判给忘了吧。”
但转念一想,我想起题目的原文依据反驳道:
“我记得题里不写着‘包含至少一个
我问他估分多少,他说在
我的母亲与他的父母在大连大学的食堂吃了一顿红烧面,我们互相问候了几句,聊了会天,那顿饭格外的香。
我们五位简单告别,各奔东西,我与他留了洛谷的号。我与母亲着急忙慌打了个滴滴,回到金州站。我逆着风,洋洋洒洒在站台踱步着。下午回程票也是硬卧,在火车上买了难吃的盒饭尝了一口鲜后,一口气睡到了沈阳,又坐高铁回到了我那小四线城市。这24小时的往返行程,堪称名副其实的“特种兵旅游”。
后来看了提高组的题,感叹没有参加,估计参加了也就拿个零蛋回来,四道题都很综合,都奇难,但都很有趣。 :::align{center}
收获:硕果之时
:::
11月6日,这天中午,考完语文期中考试后,我趁班主任不在班的时候借用调新闻(我们班每天中午都要看中央13)的时候偷偷摸摸把报名网站登上去了,点开成绩时由于浏览器窗口大小限制没有第一时间看到,我就像网上查高考成绩似的,一点一点揭开成绩,看到总分208分的那一刻,我激动得不能自已,程度堪比范进中举——我大概率省二等奖了!最让我没想到的是,第四题有两个数据答案是1,运气属实逆天。
我深知,自己的实力与那些斩获省一、AK全场的大佬们相比,仍有差距。但我依然想感谢那个没有放弃、坚持到底的自己。
最后,我想说:即使我们可能没有优越的地理位置和丰富的教育资源,外界的偏见再怎么多,也要脚踏实地做好自己,逆风生长,不负韶华。爱迪生曾说“发明是百分之一的聪明加百分之九十九的勤奋。” 我们学习要打好基础,循序渐进,这个道理适用于任何学科的学习(虽然不确定高中会是怎样)。让我们共同努力,学有所成吧!
老师在群里发的
“写给:信竞生
“能从J组“从容”走出来的你,很棒;能在S组“连滚带爬”中坚持到最后的你,更了不起!
“这种“连滚带爬”的经历,虽然当时又狼狈又难受,但它比十次轻松的“成功”更刻骨铭心。
“这次比赛,不管你是“从容”还是“狼狈”,它都只是你漫长人生中的一站。
“重要的是,我们经历了,拼搏了,也见识了。
“所以,孩子们,都别纠结了!“从容”不必骄傲,那是水到渠成;“狼狈”也绝不丢人,那是成长的勋章。
“😎毕竟,咱们信竞生,最大的优点就是——打不倒的,终将使我们更强大。”
:::::info[注释] ::::warning[本文包含个人观点,谨慎阅读]{open} update
_1 (2025.11.7) 更改标题,丰富习作内容,稍作改动,人工智能润色。
:::: * :此为笔者第一篇习作/游记,若有流水账之嫌,恳请管理员见谅。
①〔普及组〕指的是CCF非专业级别软件能力认证(CSP),认证分为入门级(CSP-J)和提高级(CSP-S),下文中所言的“提高组”即“提高级”,有关“CCF”字样的为中国计算机学会。
②〔GESP4级〕指CCF编程能力等级认证,笔者于初赛后一周参加了第四级考试。
③〔日日
④〔《一本通》〕指董永建编著的《信息学奥赛一本通》,部分内容已稍显过时。
⑤〔清北〕 指清华大学与北京大学。NOI国赛金牌选手可获保送资格,银牌选手在强基计划中享有优势。
⑥〔rp++〕信息学竞赛选手在赛前的迷信祈福,“rp”指人品,“++”是C++语言的自增运算符。
⑦〔
⑧〔恣睢(zì suī)〕任意胡为 。
⑨〔同学〕此同学与笔者关联颇多,他的帐号,兄台减量。
⑩〔不以为然〕 笔者当时及现今均不确定该结论正确与否,欢迎大家在评论区论证。
::::success[补充赛时代码(印象中)]
:::success[T1—100]
#include<bits/stdc++.h>
using namespace std;
string s;
int a[1111111],x=0;
bool cmp(int x,int y){return x>y;}
int main()
{
cin>>s;
for(int i=0;i<s.size();i++)if(s[i]>='0'&&s[i]<='9')a[x++]=s[i]-'0';
sort(a,a+x,cmp);
for(int i=0;i<x;i++)cout<<a[i];
}
:::
:::success[T2—100]
#include<bits/stdc++.h>
using namespace std;
int n,m,a[111],rr,b[111],c[111],bp=1,cp=1;//c hang b lie
int find(int x){
for(int i=1;i<=n*m;i++)if(a[i]==x)return i;
}
bool cmp(int x,int y){return x>y;}
int main()
{
cin>>n>>m;
for(int i=1;i<=n*m;i++)cin>>a[i];
rr=a[1];
sort(a+1,a+n*m+1,cmp);
int lo=find(rr);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)b[bp++]=i;
for(int i=1;i<=m;i++){
if(i%2==1)for(int j=1;j<=n;j++)c[cp++]=j;
else for(int j=n;j>=1;j--)c[cp++]=j;
}
cout<<b[lo]<<' '<<c[lo];
}
:::
:::error[T3—0]
#include<bits/stdc++.h>
using namespace std;
unsigned a[5555555],p[5555555],n,k,c,rr;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n>>k;
for(unsigned i=1;i<=n;i++){cin>>a[i];p[i]=p[i-1]^a[i];}
/*int r[5555555];
r[0]=0;
for(unsigned i=1;i<=n;i++)
{
unsigned lr=p[i]^p[i-1]^^^?;
}*/
cout<<1;
//wobuhui
}
:::
:::warning[T4—8]
```cpp line-numbers
#include<bits/stdc++.h>
using namespace std;
int n,a[5555];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cout<<1;
//wobuhui
}
:::
第四题纯属运气好,两个结果为1的😶
::::
::::info[一些高糊图片]
去金州:
水牌:
金州站站台:
大连大学:
离场:
金州站(日):
神秘黄车:
成绩条:
:::: :::::