考前
前一天晚上提前回家了,晚上十一点上床睡觉,上午九点半自然醒了,在床上刷了半个小时手机,成功略过了早饭。
午饭前看了一会板子,tarjan、KMP之类的简单板子,但好像都没考到。
午饭吃的很简单,灌了一瓶咖啡,一点钟上车奔赴考场。
两点多进了考场,精神状态不是很好,由于没睡午觉有点小困。
考时
开题之后看到T1人傻了,今年T1这么简单?十分钟之内建完文件写完了T1。开T2,看完题之后有点懵,一开始一点思路没有。想了二十分钟决定战术上厕所,上完厕所回来之后思路果然顺畅了,十分钟之内搞出了正解,然后就是写写写,大概一个半小时时间写完测完了。写完两题之后成功放下了拿一等奖的心理负担,心态也变得平和了许多,看T3,本来是冲着35分去的,结果设完状态写着写着就变成了$ O(nV) $的DP,竟然有65分?!看着时间差不多,想冲一把T3正解,想到一个两颗线段树来回倒的DP转移方式,但是没写完就只剩一个多小时了。赶紧开T4冲暴力,先写了一个12分的暴力,然后发现把暴力的其中一部分复制出来就可以过掉特殊性质A,这样就变成了28分。
时间接近尾声,最后半个小时,开了虚拟机在linux下面又跑了一遍代码,最后确认了一遍文件输入输出。
此时估分:100+100+65+28=293
考后
出考场发现一车人A了T3,有点小慌。
晚上复写了一遍代码,交到核桃OJ上测了285分,还行还行。
一个小插曲,晚上写完代码后发现一个很严重的问题:
tree.init();memset(maxn,0,sizeof(maxn));for(LL i=1;i<=L;i++){if(vis[i])maxn[i]=i;else maxn[i]=maxn[i-1];}LL ans=0;for(LL i=0;i<=L;i++){if(minn[i]==-1)continue;if(tree.query(i+1)-tree.query(minn[i]+1-1))continue;tree.update(maxn[i]+1,1);ans++;}printf("%lld\n",m-ans);
这样写并没有考虑到 0 0 0位置有没有检查点,但是由于我提前已经把不会被检查到的区间筛去了,所以此处查询最近检查点的操作并不会查询到原本没有检查点的位置,于是就没有问题了。
第二天洛谷数据造完了,测了293分,应该不会挂分了吧?不过顶天挂到270,希望能去今年的清华营、WC、APIO等一众比赛。
总结
今年相较去年,实力提升了不少,主要是正确的比赛策略让我稳定地拿到了分数,虽说没有冲出来T3是遗憾吧,但是我也确实没有稳定做出这档题目的能力,NOIP加油,希望能够拿到省一。