Day1
在空中感受了一下日本的特别高的森林覆盖率,在机场感受到了家乡的感觉(中文似乎作为第三语言),过海关的时候感受到了对面说英文我听不懂口音,说中文我以为在说英文的无力。。
认识了向导,据说 87 87 87个国家至少有 1 3 \frac{1}{3} 31的向导是中国人(向导都是筑波大学的留学生),没有英文水平的选手甚至觉得中文比英文好用(捂脸)。
官方发了两件T恤,一件雨衣,一个 made in China \text{made in China} made in China 的水杯,一个IA挂件,一堆赞助商贴纸,一个可以单肩背可以双肩背还可以拎着的袋子,感觉体验海星。
我们在的宿舍(
NITS
\text{NITS}
NITS,一些国家在
KEK
\text{KEK}
KEK)是单人间,条件挺好的,就是没有独立浴室和洗漱间。向导带我们参观了一遍宿舍,并带我们参观了
public bath
\text{public bath}
public bath(其实就是个大澡堂这样的东西),似乎是日本的洗浴文化emmm?
本来大家约好一起去
public bath
\text{public bath}
public bath,结果我翻了翻宿舍图,发现在一层和二层共有
12
12
12间
shower room
\text{shower room}
shower room,实际上也就相当于独立浴室了。于是我就带领他们一起去
shower room
\text{shower room}
shower room了。也许因为是第一天,时差和不熟悉都导致没啥人用
shower room
\text{shower room}
shower room,感觉我们似乎是第一批使用者?
关于第二天的 opening ceremony \text{opening ceremony} opening ceremony发了一张须知,上面说明天有贵宾,进入 TICC \text{TICC} TICC也就是会场需要安检。向导说贵宾是日本的 princess \text{princess} princess,之前似乎都没有听说过这样的事情,好像是临时决定的,有点努比。
跑去 shower room \text{shower room} shower room洗澡,洗完澡去洗衣房洗衣服,想了想好像我们需要洗衣粉。向导好像说过去找志愿者服务台要,于是我们去了那里,尝试用英文进行沟通,对方听了很久才听懂我们想要 powder \text{powder} powder,然后用不太熟练的中文说道:洗衣粉?
发现了自动售卖机,宿舍附近的自动售卖机只支持最大 1000 1000 1000日元纸币,而我们带的最小面额的纸币都高达 5000 5000 5000日元。编了半天怎么说整钞换零钞,总算是把一张 5000 5000 5000变成了五张 1000 1000 1000。
买了杯看起来就像绿茶的东西,宿舍附近的售卖机饮料价格普遍在 100 100 100日元左右,好像可以接受。喝了点感觉和国内的绿茶剧本不太一样,像是一杯带有瓜子味的水。想了想应该是因为国内的绿茶偏向奶茶严重,似乎这个才比较纯比较健康(虽然喝不下去)。不过零钱还是不够,计划第二天去 711 \text{711} 711(便利店)换零钱。
对当天的食物表示严重抗议,感觉脸都吃绿了(傻逼网友日常想不起来先看看吃的东西是啥)。
感觉西欧国家的队员们辨识度很高,网友们好像都非常 open \text{open} open 真是不太习惯。
Day2
参加开幕式,座位是按照国家字典序排的,我们的前面是加拿大,后面是克罗地亚。加拿大老哥似乎都是华裔,不过也只有一个会说中文的。问了加拿大老哥一个神仙题,一个八年级的老哥教了个做法,感觉非常努比,这老哥好像还能打四年 I O I \mathrm{IOI} IOI,恐怖如斯。
开幕式好像没啥好说的,除了一开始
ia
\texttt{ia}
ia和
one
\texttt{one}
one的表演之外,似乎就是几个
I
O
I
\mathrm{IOI}
IOI相关的组织者讲话。感觉日本上一代人英语自带口音,主持人的英语发音感人肺腑,根本听不懂。体验大概是大学校长>市长>>主持人,这个就不提了。
开幕式有个每个队伍认识一下的环节,就是把每个队伍都报一遍,然后在大屏幕上放上头像,然后镜头对准你们打个招呼。蒋老师说要口号,不过看起来时间很短,那就随便打个招呼得了。
克罗地亚老哥似乎准备充分,他们从口袋中掏出一顶顶格子帽扔向四面的网友。因为离得近,似乎顺手素质了一顶。
中饭便当凉得感人肺腑,严重抗议。期间休息的时候尝试睡觉,似乎听到了四周外国老哥爽朗的笑声,然后我们感觉还是不睡了比较好。
和 Japan \text{Japan} Japan的二队老哥进行了短暂的交流,普及了 wys \text{wys} wys文化和卡常数大法,学会了如何描述复杂度。
下午是练习赛,虽然笔记本键盘似乎海星但是还是打算用自己的。带了鼠标真是舒服,似乎有的国家的老哥没有注意到赛前说过的配置问题。。
虽然赛前的时候做过,打的时候还是出现了若干问题,快结束的时候才改对 DP \text{DP} DP,感觉水平确实不行。
神仙R爷爬山爬了一万分,感觉有点牛逼不行。
R爷座位附近似乎有美国的神仙网友 Eric Zhang \text{Eric Zhang} Eric Zhang和 RUS-2 \text{RUS-2} RUS-2,似乎是种子区。
我座位附近似乎是一个北欧老哥,一个奥地利老哥,一个塔吉克斯坦老哥和一个日本二队老哥。隔着一排好像有个可能是前苏联范围内的老哥长得和电视上的西方少年一样帅的。。老哥?
听说有领队抗议了,晚上的饭菜质量出现了大幅度提升,未成年人经历不了这么刺激的。
领队再次强调了一些注意事项,比如要先读一遍题,尽量看中文题面,最后可能变成OI赛制啥的。
第二天考试,第一天断网。去了一趟711便利店,争论为啥官方不给去 lawson \text{lawson} lawson。因为第二天要考试,我们鸽掉了晚上的 fun time \text{fun time} fun time,计划早点睡觉,于是十点就睡了。
感觉日本这边的雨棚设施非常齐全,校园内不打伞也不用淋雨就能从一个地方到另一个地方。
Day 3
考试日,然后早上三点五十就醒了,似乎早睡并没有什么效果。心里一直是慌的,根本睡不着。
早上去参加考试,路上也一直很慌,因为怕睡着喝了一杯咖啡饮料, guide \text{guide} guide和许多其它中国领队都给我们加油鼓励,感觉就像是主场一样。
主办方真能鸽,开始之前先让坐在车上不准下来,然后慢慢入场检查。我们队是非常靠前进场的,这时候已经八点五十了,一看就要 delay \text{delay} delay。
和大家都说了加油,出去看到那个会中文的加拿大老哥也握了握手加油,假装很熟的样子(雾)。
赛前似乎啥都不准你碰的样子,桌子上放着大大的
DO NOT TOUCH ANYTHING
\text{DO NOT TOUCH ANYTHING}
DO NOT TOUCH ANYTHING,还有人不停在上面提醒大家应该干啥,比如: Do not touch the computer, do not touch the material, do not touch your banana, do not eat, stay at your station…
似乎day1是允许摸放在桌上的水的。
后面的老哥一直在交流,似乎去插了两句嘴。
9.35的时候上面的老哥说有个好消息要告诉我们就是比赛马上要开始了,全场响起了热烈的掌声。
似乎有纸质英文题面,可以当草稿纸用了。先登录了系统,下了网页版题面,按照剧本看了看题。组合动作 排座位 狼人
第一题好像是个普及组傻逼题,想起来之前若干次比赛的教训,接着看了第二题和第三题,感觉T2数据范围看起来就是个分块、应该不是很难,T3好像是个最小方差生成树,不太能写。于是滚回去看第一题。
操作次数在 N N N 左右,看起来就是个逐位确定。稍微想了想似乎询问第一个字符只要 3 3 3 次,最后一个字符要 2 2 2 次,中间的每个只要 2 2 2 次:询问 S a S b a S b b S b c SaSbaSbbSbc SaSbaSbbSbc 即可,于是这样就是 N + 3 N + 3 N+3 次解决了这个问题。似乎旁边的老哥们都还没有敲键盘,于是似乎变成了周围第一个敲键盘的人(捂脸)。
在
20
20
20 分钟的时候写完提交,得到了
5
5
5 分的好成绩,随便手输了几组都是对的,感觉情况有点不妙,跑去写对拍。写对拍的时候要给
n
n
n 确定范围,于是发现了还有
n
=
1
n=1
n=1 特判这种事情,改了改得了
97
97
97 分。不过似乎中间的部分可以各种瞎搞改成也许不超过
2
2
2 次,然后突然意识到根本不会做
n
=
2
n=2
n=2。
对着代码看了
5
5
5 分钟发现还有个东西叫二分,改了改就过了,这时候还有四个半小时,然后
CMS
\text{CMS}
CMS突然挂了(之前咕咕好像也有这个问题)。
对着第二题和第三题不知所措,写了个第二题的暴力,感觉应该先把这个题放放再说,先去写了个第三题暴力。于是按照剧本,每次把两端点都
≤
R
\le R
≤R 或
≥
L
\ge L
≥L 的边加进集合,判断
S
S
S 和
T
T
T 是否联通。
写完发现过不了样例,画了画图才意识到想错了,还好之前这样挂过几次,没冲上去就直接写最小方差生成树,不然咋死的都不知道。
快两个小时的时候改对了暴力,想了想回去稍微写写第二题的 Q H W p o l y ( log ( H W ) ) Q\sqrt{HW}poly(\log(HW)) QHWpoly(log(HW)) ,写了一点感觉第三题的得分率不太对,又回来想第三题。
假了半年终于假出了一个看起来可做多了的题意,就是可以 Kruskal \text{Kruskal} Kruskal 重构树,之后判断两个子树中是否有标号相同的在 L ∼ R L \sim R L∼R 之间的公共点(实际上是判断是否有公共标号)。对着这个问题看了十分钟才意识到是个普及组二维数点,写了写就过了。
这个时候可能还剩两个多小时,因为前面分块改了一半,感觉很有信心搞出一个能跑过 H = 1 H = 1 H=1 ,还能在 H ≠ 1 H \ne 1 H̸=1 上一战的分块算法,然后就一边改一边交,改一点交一点。
改了一个半小时发现情况有点不对,分块里要维护某个 x x x 出现的次数。本来这个剧本影响也不会很大,但是写个主席树似乎被 268MB \text{268MB} 268MB 空间卡死了。。当时感觉整个人都要自闭了。。
想了想几个部分分好像除了 H = 1 H = 1 H=1 都挺容易于是花了十几分钟 rush \text{rush} rush 了一下过了,然后开始对着原来的分块改 H = 1 H = 1 H=1。
最后来不及了只能枚举一个想不清楚的地方是咋写的了。。也没有时间管其他的东西,只能交上去听天由命了。。
感觉考试快要结束的时候就缺颗大心脏。。这个题好像一开始目标就直接跟着 H = 1 H = 1 H=1 去也该过了。。
考出来感觉 100 + 37 + 100 = 237 100+37+100=237 100+37+100=237 垫底了,不过听起来附近的老哥们都是 100 + 100+ 100+ 好像也没有那么崩。。感觉大概也就是几个阿克几个 270 270 270 分吧。。
我们四个老哥交流了一下发现 237 237 237 还是最高的,感觉就是 CNOI \texttt{CNOI} CNOI 四个老哥都在金牌线上下啊。。
因为手机啥的进去前就放进袋子上交了,出来问 guide \texttt{guide} guide 情况的时候感觉非常忐忑结果发现怎么被神仙网友 Benq \texttt{Benq} Benq 锤爆了一堆分。。感觉也没什么希望翻盘了。
不过 237 237 237 分有第二是比较出乎意料的。。队长不会第三题感觉。。就是个败笔啊。。这个题好像也就是一个降智好题啊。。
感觉 Day 2 \texttt{Day 2} Day 2 有牛逼交互还是说不定能翻的,开始奶中国队喜提四铜。
下午申诉啥的也没什么事就提前溜了。。lun不知道考场上 H = 1 H = 1 H=1 咋写挂的怨念很深想拉代码回去调好像也不太行。。工作人员说可以接U盘但是实际上根本接不上。。然后他好像在我的没啥用的瞎扯下拍了照打算回去图片转文字…
啊,躺在床上真是舒服极了。
Day 4
待更
Day 5
睡了个好觉,早上起床:
lun: 你们昨天晚上有感觉有地震吗,我好像被震醒了还以为是迟到了有人在摇我
r爷: 我晚上好像醒了一次
队长和我: ???
又是鸽子的一天,于是和剧本一样,我们又被关在车上等比赛准备了…
今天似乎准备充分一点,八点十分的时候比赛就开始了。
因为太鸽了很久没写了所以比赛情况就看后面的总结吧
比赛最后没过最后一题感觉真的挺崩溃的,不过想想金牌应该挺稳的, Day1 \text{Day1} Day1 落后 Benq \text{Benq} Benq 那么多也没法追就好受一点了。出来的时候听到了各国教练的恭喜声,问了 guide \text{guide} guide 之后知道了得分情况,这个时候感觉心里又挺不是滋味的,感觉我和队长有一个不演员就能打赢演员了一天的 Benq \text{Benq} Benq 了,心态有点崩溃。
下午看到了兜售 IA \text{IA} IA 周边的 sponsor \text{sponsor} sponsor 柜台,因为没有带够钱也不太好确定买啥,问到了 7 号上午还有的时候我们就跑了。队长似乎在联系大家问有没有代购的,我也问了问同学。
听说有 dls(?) \text{dls(?)} dls(?) 在群里散布 Day1 T2 出题人是 lca \text{lca} lca 的谣言,看起来证据很真实,碰巧 lca \text{lca} lca 又不知道为啥跑来了日本,已经被骗过去的时候才从别人口中了解到真相。不是中国人击败中国人真是太好了。
和 guide \text{guide} guide 商量了 Day 7 \text{Day 7} Day 7 中午去体验一下日本当地食品。
晚上宅在寝室。
Day 6
待更
Day 7
待更
Day 8
疏散日,因为我们是下午的飞机,安排的是早上十一点多的车,然而房间很早就要退了,转移到
玩了玩 blokus 被吊锤,和 lun 下了盘棋,和加拿大老哥表演 9*9 围棋盘让四子,早上这样就过去了。
终于,离开日本了,不长不短的几年 OI 生涯也终于结束了。
我的 OI 生涯从初一起步,不算太早也不算太晚。身边有起步稍早的,也有和我一样基本零基础的。初二接连在两个初中组比赛混到一等奖后,我才慢慢窥得 OI 竞赛的一角,方才意识到差的还是太远了。
初三认真学了一年 OI,但过程也有些波澜。先是在 NOIP 中取得提高组一等奖,随后却主动放弃了去冬令营的机会;随后又在打够一半暴力就能进省队的省选中几乎没拿到分,错失省队资格。高一入学后,迎面而来的是 NOIP 2016 的晴天霹雳——虽然通过了当年几乎最难的一题,虽然六道题中嘴巴了五道,但由于几个手误最终只得到 329 分,甚至没有达到浙江的一等奖分数线,更别说有资格去冬令营了。
幸而坚持了下来、没有在那时退役。随后进入省队、集训队、候选队、国家队的过程,都不像是我所经历,都如梦一般没有实感。似乎在最重大的考试中,我总有好运相伴。一路走来,结识了许多可爱的朋友,目送走一代代的学长,见证了一个个新星的升起。从不知天高地厚的初生牛犊,到仰望传说的一介学子,再到成为后来者口中的传说,承蒙了许多人的帮助,终于也是我告别的时候了。或许仍有一些伤感,但也已经无所谓了,在星辰大海的征途中,我辈仍当奋勇前行。
NOIP 2018 游记
考前定了一个小目标:不低于 IOI 的分数;又定了一个大目标:分数超过 500 500 500 、感觉之前两年 NOIP 都考得特别没有面子,第一年是原地写了一堆手误,第二年是 3.5h 当 5h 打,感觉今年再出事要上知乎了。“如何看待某选手 NOIP 中的惊人表现?”etc.
毕竟也是第四次参加提高组 NOIP 的老选手了,试机其实影响并不是很大。机器是 6 代 i3 似乎海星,今年键盘还可以,鼠标可能有点…emmmm,我觉得不行。
怎么感觉网友们全都认识我。。我有点。。害怕啊。。?
试机本来打算写个 FFT 的,想了想都老年选手了咋写得动这种玩意儿,于是写了个 FWT 就跑路了(摔)。
Day 1 进场的时间很早,进考场的时间也很早,似乎只是打了一场 IOI 就快习惯考前不动手这种事了。Day 1 的前两题都是普及组题,大概 8:50 左右就没啥问题了。
T3 现场读出了一个鬼畜题意,写了个动态 DP 维护树直径,感觉非常刺激。写完了大部分动态 DP ,按照习惯要先写个暴力版本的每次重构线段树来检查正确性,改掉了 RE 的问题后轻松通过样例一,样例二就错了。在纸上画了画图发现读错题了,惊出一声冷汗,还好还有一个多小时,于是改成对的题意之后拍了拍,解决了程序内的 BUG 之后似乎也只剩三十分钟左右了。
于是肉眼检查代码直到考试快结束才跑路,感觉大概没啥问题,顺便把动态 DP 代码粘在了 T3 的后面。
Day 1 是普及组难度,Day 2 估计不会太简单。进场读了三个题,第一题是签到,感觉第二题是个莫名其妙的普及组题,第三题看上去是个动态 DP,可以放到中期写,昨天刚写过所以问题不大(电脑里咋没昨天代码了,气死了)。随便写了个第一题,肉眼检查了一下就去做 T2 了。
观察了一下 T2 的样例,第二组数据竟然不是
2
×
3
×
4
×
3
×
2
2 \times 3 \times 4 \times 3 \times 2
2×3×4×3×2,和剧本不太一样,手画了十分钟图才发现一些奇怪的 case,于是开始推点靠谱的方法。
感觉对角线 DP 还是挺行的,对着
n
,
m
≤
8
n, m \le 8
n,m≤8 做也很快,大不了最后写个
BM
\text{BM}
BM 找找规律,于是开始写对角线 DP。老年选手的代码能力每况愈下,写了 1 个小时的假做法和对角线 DP 后,感觉情况不太对劲,再这样下去要出事,于是跑去写 T3。
T3 的动态 DP 比想象中还好写,半个小时不到写完就直接过了样例,为了以防万一还是测了测较强的极限数据是否超时,进行了一定程度上的对拍,加了点常数优化,感觉这个题大概稳了。
这时候只剩半小时了,也不太来得及写对角线 DP,感觉 T2 要喜提最低档暴力了。突然发现了一条性质可以直接一列一列
O
(
m
2
2
n
n
2
)
O(m 2^{2n}n^2)
O(m22nn2) DP 过去,于是赶紧 rush。还剩十几分钟的时候过了样例,测了测
n
=
2
n = 2
n=2 的数据挺真实的,就假装过了开始加优化,优化加完的时候只剩两三分钟了。似乎这是第一次在大考最后还能 rush 完代码的情况。
赛后几天 AH 终于发了代码,洛谷和学车数据测出来都是 580,和预期一样。虽然有点遗憾没能上知乎没能阿克但是也还算满意吧,至少比前几年的得分可接受多了。
被 CCF \text{CCF} CCF鸽了的参赛总结
首先很荣幸能够作为中国队一员参加在日本筑波举办的第 30 届国际信息学奥林匹克竞赛,感谢 CCF 和科协的组织,感谢领队老师们带队和翻译题面的工作和对我们的鼓励,感谢我的教练叶国平对我的一直以来的关心和指导,感谢国家集训队教练张瑞喆在 IOI 赛制上做的努力,也感谢主办方对比赛的重视与支持。
因为今年的集训大多为集训队员开放了 IOI 赛制,同时在赛前也参与了一段时间针对性的模拟赛,因此对赛制还是比较熟悉的,加上日本和中国的时差只有一小时,可以说相当于半个主场了。来的时候碰到了叙利亚等国的友人,我们四人也在机场前合影留念。
和往年一样,每支队伍都有一名 team leader,据说他们都是筑波大学的学生/留学生。我们的向导是一位姓路的中国留学生,也要感谢他给我们提供的许多帮助。看起来有很多中国留学生报名了志愿者,四处都是和我们打招呼的中国人,似乎就算英语交流起来有困难也不成问题。
虽然前两天的时候由于饮食习惯不同(冷食还是有点难受),大家都不太适应,不过主办方及时发现,后面几天还是很开心的,这个要点赞。
在日本印象比较深刻的就是当地人的综合素质,例如道路上虽然没有垃圾桶但是还是很整洁,在电梯上会自发排成一列留出应急通道。感觉国内还是有很多可以学习的地方。
这次 IOI 的赞助商较多,第一天的 excursion 基本上就是参观一些赞助商的地方。很多地方都只有日文,很多国家的选手都觉得非常无趣。第二天要有趣一些,但或许是因为场地离住宿点较远,主办方又安排了连续 3 个场馆的参观,因此每个地方的参观时间都较为短暂,甚至在一个国家公园中只是沿着外围绕了一圈都有些赶,感觉时间如果充沛一点会更开心。
最后一天跟着 guide 去了一家日本料理店,也算是在一定程度上体验当地的生活吧。
和加拿大队、澳大利亚队、美国队(主要是去见Benjamin Qi)、日本队、香港队、澳门队选手进行了一些交流。加拿大队和澳大利亚队都有会说中文的选手,交流起来比较容易。
回到比赛本身。练习赛在 IOI 开始前的几周就已经挂了出来,但做的时候还是出现了一点小差错找了很久,不过结束之前总算还是写完了。今年的评测系统新增了可以看每题所有人得分占所有人总分的比例的功能,感觉看起来还比较靠谱。
虽然第一个考试日前有早睡,但还是早上三点五十就醒了,感觉还是很紧张的。guide 和许多其它领队都给我们加油鼓励,感觉就像是主场一样。
主办方在我们到达场馆时似乎并没有准备好,于是先让我们坐在车上,一会之后才慢慢开始入场检查。虽然我们队是很早进场的,但也已经 8:50 了。不出所料,比赛推迟到了 9:40 开始。比赛快要开始的预告得到了全场热烈的掌声。
看了看文件袋,并没有发现里面是有纸质中文题面和草稿纸的,于是拿英文题面充当草稿纸使用。下载了 PDF 题面,先读第一题。读完后觉得第一题可能是个简单题,但想起之前发生过的在一题上吊死的事情,还是去阅读了第二题和第三题的题面。第二题的数据范围是 Q ≤ 50000 , H × W ≤ 1 0 6 Q \le 50000, H \times W \le 10^6 Q≤50000,H×W≤106,看起来就是个分块好题。第三题读完题觉得是和互测的最小方差生成树一模一样的板子题,外国选手估计不太会做,但是这题写起来很花时间,于是决定先放一放。
想了想第一题:操作次数在 N N N左右,看起来就是个逐位确定。似乎询问第一个字符只要 3 次,最后一个字符要 2 次,中间的每个只要 2 次:询问 S a S b a S b b S b c SaSbaSbbSbc SaSbaSbbSbc即可,于是这样就是 N + 3 N + 3 N+3次解决了这个问题。想到这的时候附近的人都还没有敲键盘,感觉就很有信心。
在 21 分钟的时候写完提交,得到了 5 分的好成绩,随便手输了几组都是对的,感觉情况有点不妙,跑去写对拍。给 n n n确定范围发现了还有 n = 1 n=1 n=1这种事,改了改得了 97 分。不过似乎中间的部分可以各种瞎卡常数,但想到 n = 2 n=2 n=2才发现根本不会做。
对着代码看了 5 分钟发现还有个东西叫二分,改了改就过了,这时候还有四个半小时,交完后评测系统 CMS \texttt{CMS} CMS突然挂了。还好这时候还不用交题,于是接着去看题。
对着第二题和第三题不知所措,写了个第二题的暴力,感觉应该先把这个题放放再说,打算提交的时候发现 CMS \texttt{CMS} CMS还是挂的,先去想了想第三题暴力怎么写。过一会 CMS \texttt{CMS} CMS修复了,得到了和期望一样的成绩。于是开始写自己想的第三题暴力:每次把两端点都 ≤ R \le R ≤R或 ≥ L \ge L ≥L的边加进集合,判断 S S S和 T T T是否联通。
写完发现根本过不了样例,画了画图才意识到想错了,还好之前训练的时候这样挂过几次,没冲上去就直接写最小方差生成树,不然咋死的都不知道。于是回去改第二题的 O ( Q H W p o l y ( log ( H W ) ) ) O\left(Q \sqrt{HW} \mathrm{poly}(\log(HW))\right) O(QHWpoly(log(HW)))做法。中途终于意识到第三题暴力咋写了,于是在 106 分钟改对了暴力,然后又回去继续写第二题。写了一会感觉这个复杂度也不是个事,思考了一会有没有更优的做法。这时候看了看得分率,感觉第三题的得分率好像不太对,于是又回来想第三题。
编了好几个错误的做法之后终于转化出了一个比较可做的题意,对着问题看了十分钟才意识到是一个简单的二维数点,于是在 172 分钟通过了该题。
这个时候可能还剩两个多小时,因为前面分块改了一半,感觉很有信心搞出一个能跑过 H = 1 H = 1 H=1,还能在 H ≠ 1 H \ne 1 H̸=1上一战的分块算法,然后就一边改一边交,改一点交一点。
改了一个半小时发现情况有点不对,因为之前写的时候没有注意空间限制,我本来想改的分块似乎不是 268MB 内存可以解决的。想了想怎么压空间才发现时间已经不早了,于是赶紧放弃手上这份代码去写部分分。想了想几个部分分好像除了 H = 1 H = 1 H=1都挺容易,于是花了十几分钟过了,然后开始对着原来的分块改 H = 1 H = 1 H=1。
到最后十分钟的时候改代码的手都是抖的,感觉也不够冷静了,最后枚举一个不太想的清楚的地方爆了几发都没过,很后悔没有一开始就奔着 H = 1 H = 1 H=1的部分分写。
考出来感觉只有 237 分,应该不算什么好成绩。我们四个选手在场内交流了一下,发现 237 甚至是中国选手最高分,感觉也就只能在金牌线左右摇摆了。结果出来后发现除了 Benjamin Qi 之外没有选手超过 237 分,但是第一天输了这 63 分感觉不太追的回来了。
第一天的得分率非常稳定地体现了难易的情况,做起来比较舒服。
第二个考试日的早上发生了 6 级左右的地震,不过我不知道为什么睡得很熟没什么感觉。这一天的比赛开始时间又推迟了十分钟。
发现信封中原来还装了中文纸质题面喜出望外。由于第一题题面很长先跳过,读了第二题和第三题都感觉看起来挺可做的,尤其是第二题还是我比较擅长的一类交互题,而且可能是个 Hard \texttt{Hard} Hard,估计应该不会考得太差。
草草阅读了第一题的题面,开场便发现第三题的得分率飞快地达到了 100% ,随后得分率一直稳定在 90% 左右,估计第三题是个较为简单的试题。对着题目想了想感觉 60 分的暴力还是可以强行写出来的,思考了一会无果之后决定先去做第二题。因为第一题看起来就像个中档题,第二题可能是这一天最难的试题,因此打算先过为敬。
第二题是个非常有趣的题。前四个子任务都是一棵树,想一个做法应该没有任何难度。第五个子任务应当是对做法有提示作用的,因为这一组数据的限制只有 a = 1 , b = 2 a = 1, b = 2 a=1,b=2。稍微想了一下发现只要支持给一个点集 V V V并查询 S S S和 T T T在 V V V中的状态是否相同即可解决这一问题:首先用 ⌈ log n ⌉ \lceil \log n \rceil ⌈logn⌉次询问将点集区分为两个集合,并分别二分,这样就可以解决这个问题了,由于一开始要一次询问可能会爆掉 50 50 50次询问的限制,但这样微小的常数是可以优化的,一看就非常符合出题人的心理。如果我们将 V V V和除 V V V以外的边的代价设为 B B B,其他的边设为 A A A,那么我们要得到的只不过是经过 B B B边次数的奇偶性。于是我很快讨论出了当 a = 2 p × r , b = 2 q × t , p ≠ q a = 2^p \times r, b = 2^q \times t, p \ne q a=2p×r,b=2q×t,p̸=q时的解法,并开始思考 p = q p = q p=q时的解决方案。想了一段时间无果之后先行提交了之前的代码,果然只通过第五个子任务,这时时间已经过去了 84 分钟。
继续想了会,因为第三题的得分率居高不下又去想了想第三题,结果快两个小时的时候还只有一个子任务的分。还有个第一题没太读懂感觉这样容易出事,于是回去仔细读了一下第一题,看了看数据范围怎么感觉随手写个线段树就有 61 分。过了一会发现可以并在一起建一棵大线段树,这样就达到了题目限定的 N + log 2 N N + \log_2 N N+log2N次操作的限制。感觉这个题目比后面两个题简单多了但是得分率甚至只是和第二题差不多,看来这个得分率也不太靠谱。
断断续续写了半个多小时,还拍了拍才在 157 分钟解决这个问题,看了看得分率情况仍然是第三题居高不下,但第二题的部分分还没有拿完,于是回头去做第二题。对着部分分看了几分钟发现 18 分的代码加一行就能得到 69 分了。因为感觉金牌比较稳了,这时第三题的得分率也终于被第一题反超,于是尝试了一些乱搞来修之前的做法,结果甚至没有多通过一个测试点。于是继续去想第三题了。
对着题目想了半个多小时还是不太会,于是先写了个暴力,然后想想 h i ≤ 20 h_i \le 20 hi≤20有没有什么能写的做法。 h i ≤ 20 h_i \le 20 hi≤20可以理解为笛卡尔树不高,想到这里突然发现这题可做多了。考虑一个询问 [ l , r ] [l, r] [l,r]时,我们只要考虑其最大值的位置 x x x,并枚举开会位置在 x x x的左侧还是右侧,于是问题转化为对每个笛卡尔树上的区间维护前缀和后缀的所有答案。
想到这突然感觉这是个水题,直接建笛卡尔树写了个暴力,虽然感觉写的复杂度不对不过莫名其妙就得了 60 分。时间还剩下 40 分钟,于是考虑用线段树维护这样的前缀和后缀的答案。感觉转移是单调的,也没多想就开始写了。还剩 25 分钟时似乎改对了数据结构以外的部分,打算继续写的时候突然感觉有点不对劲,因为这样二分就像是对着这个题一开始就直接二分 x x x的位置一样,于是又凭借直觉认为这肯定是错的。
感觉已经不能冷静思考了,想了想也没啥好办法,时间也不剩多少了就打算 rush 一个李超树来维护,说不定写完交上去过了还能翻。不过显然奇迹没有出现,最后十分钟的我已经完全失去了冷静,最终写出的代码连样例都没有通过,虽然赛后改过了样例但感觉两个 log \log log也没有什么回天之力了。
队长第二天翻盘了,但R爷第二天有点崩,感觉金牌不是很稳。直到出来之后,guide 和一些其他国家的领队祝贺中国队四金,才放下心来。但打开排行榜,发现和第一名 Benjamin Qi 只差了 33 分,队长和他只差了 30 分,感觉还是有点难受。虽然按照实力来说确实是不如的,但是面对一个第二天没有发挥好的对手,还是因为自己的几次失误输给了对方。如果 Day 1 不要想那么多,至少 H = 1 H = 1 H=1是可以稳稳通过的,而差距也仅仅只有这一档 33 分;如果 Day 2 少在 T2 上花一点时间,或哪怕是在最后仔细想想之前二分的想法是否正确,坚持写下去,这 40 分也许就不会丢。虽然心里还有些不甘,但结束的便已结束,向 Benjamin Qi 表示祝贺。
综合来看本次 IOI,我能够以并不突出的能力,取得 rank 3 这样的成绩,得益于在这样的大考考场上的冷静,这与有过的几十场 IOI 赛制训练赛是分不开的。但我没有取得更好的成绩,也应归咎于在考场上的不够冷静。当面对重要比赛时,训练有素的选手应当具有一颗大心脏,在分析得失上要理性,不能纠缠于同一题,也不能纠缠在自己擅长的提醒,面对并不充沛的时间时也一定不能心急。只有一直摆正心态,才能在这样的赛场上发挥出自己应有的水平。
这次 IOI 中国队取得 4 金的成绩,选手分列 2, 3, 6, 23 名,算是历年来较好的成绩。今年的试题和 16 年及以前的试题较为类似,每天都有一道相对简单的试题,同时在一试有一道中国选手较为擅长的数据结构题,二试也并没有拉开较大的分差,对中国队的选手较为有利。今年 IOI 中新提供了可以查看每题总得分与所有题目总得分的比值,在一定程度上有利于选手发挥出自己的水平。但在二试中,我们也看到了这一比值往往会受到部分分的影响,不能真实反映这一题的难易程度,这一点尤其要注意。同时,IOI 中许多部分分对较难的正解会产生提示作用,但也会产生一定误导。因此在比赛时要根据情况及时调整策略,较难的题不要死磕,多得一分是一分。