19联赛小结
用一篇流水账纪念一下这次比赛。
11.15 Day0
经过两个小时的车程 , 终于来到了南京
阳光洒在南航主楼上 , 泛起点点金光。
这已经是我初中第三次来南京比赛了 , NOIP也因政策原因被迫改名为CSP , 三年以来 , 发生了太多太多的事 , 心中不由感慨万千。
上午做了几道codeforces上的题 , 将一些不太熟练的代码又敲了一遍 , 晚上从宾馆7楼爬到18楼和PCF , CZY几个高一的大佬玩了一会 , 明确了一下明天比赛的策略 , 十点就睡觉了。
11.16 比赛日 Day1
夜里醒了很多次 , 不过精神还可以 , 并没有像去年那样萎靡不振....
提前半个小时到达南航操场排队 , 和本校的几个大佬谈笑风声了一会就进机房了。
试机的时候把模板写了 , 确认了电脑没有问题 , 过了一会试题就下发了。
做了个深呼吸 , 开题!
先看T1 , 发现这是个比较简单的模拟题 , 只需要枚举二进制位一位一位分治下去就行了。 我很快就把这题做完了 , 通过了所有样例。 这时我看到了对于95%的数据 k <= 2 ^ 63 - 1 , 对于100% 的数据k <= 2 ^ 64 - 1。 这个限制有什么用? 我想了想好像没啥用就不管了。 万万没想到这造成了我之后的半个月每天都追悔莫及。
再看T2 , 发现这是一个树上的计数题。 看到括号序列 , 我很快想到了把左括号看成1 , 右括号看成-1 , 然后只需要在深度优先遍历的时候用可持久化线段树维护就行了。 仔细想了一下 , 发现并不需要这么复杂 , 只需要对于每个结点维护一些信息 , 在DFS的时候实现可回退就行了。 这样做的复杂度是线性的。 在9 : 15的时候我完成了这个程序的调试 , 测了一下第三个样例 , 发现运行错误。 我顿时惊出一身冷汗 , 通过测试 , 发现南航的机器只允许进行30000次递归。 一开始 , 我认为程序到北京测试时会开大栈空间 , 但觉得不测第三个样例太虚了。 斟酌了一番 , 决定还是手写栈模拟递归。 在此之前我从未这样写过 , 因此一开始以为这需要花费大量的时间 , 没想到我在15分钟内就修改完毕 , 完成了调试。
此时我已经拿到了200分 , 上个厕所冷静了一下 , 回来思考第三题的解法。
T3又是一道关于树的题 , 这题的N最大只有2000 , 开始时我想出了一个贪心的算法 , 兴冲冲地写 , 结果一个小时后发现这个是错的 , 当中还断断续续想出了其它做法 , 不过也一一被否决了。 时间只剩下了一个小时 , 怎么办? 我不由乱了阵脚。 先去写了一条链的部分分 , 没有成功 , 又去写菊花图的做法 , 也没有成功 , 最后只写了10分的暴力分 , 此时的我才意识到策略的失误 , 不应该强攻满分算法 , 然而已经为时已晚 , 我开始疯狂调试一条链的部分分 , 渴望着奇迹的发生。 然而并没有奇迹 , 我最终还是没有完成这档部分分的调试。
考试的时候后面的南外大佬不停地敲键盘 , 于是在比赛后问了一下他的估分 , 得知他第三题也只有10分 , 然后又问了常中的jyg , 得知他也只有10分 , 这才知道今天的第三题难度非常大。
day1估分100 + 100 + 10 = 210
下午去初中组玩 , 发现试题非常简单 , 10分钟做出了前2题 , 两个小时的时候做完了4道题。
通过喝水 , 吃东西 , 上厕所 , 思考人生等方式消磨时间。 一个半小时后比赛结束了。
晚上和合肥四十五中的老朋友lmb交流了一下 , 得知他第二题挂了 , 无望翻盘。 或许这就是OI吧 , 然而他还不是最惨的 , 今天结束后已经有很多高二的Oier将要回归文化课 , 迎接高考 , 明天又会有很多人。 就像人生一样 , 总有人留下 , 也总有人离开。这也正是这条路的残酷性。
11.17 比赛日 Day2
早上和几个南外的聊了会天 , 得知他们昨天估分也都是210分。 然而djq神仙把第三题做出来了 , Orz!
8 : 00进考场试机 , 发生了这样的一件事情 , 旁边的选手不能调试 , 却被告之工作人员只管linux系统下的问题 , 不管windows的 , 数次举手示意均被拒绝 , 且考官拒绝更换座位。 这使我感到有些愤怒 , 但也有些庆幸自己没有被分到他的座位上。
8 : 30 , 比赛正式开始。
我先把三题都读了一遍 , 发现今天的试题明显变难了。 但部分分并不是很难拿。 我还是决定以1,2,3的顺序开题
T1是一道计数题。 我思考了20分钟 , 仍没有思路。 后面的南外大佬已经开始敲键盘了 , 我不由有些紧张。
又过了一会 , 我突然想到题目中的第三个限制非常特殊 , 不满足要求的数最多只有1个 , 因此可以容斥 , 用总数 - 不合法数。 这两者都可以动态规划求出 , 只需做M次即可。 预处理每一行数的和就可以做到O( 1 )转移 , 这样做的时间复杂度是O(N ^ 3M)的 , 可以拿到84分。
考虑到这个做法能拿到这题的大多数分数 , 再加上强烈的得分欲望 , 我用10分钟写完了这个程序。
再看T2 , 36分直接O(N ^ 3)动态规划就行了 , 于是我先写了这一档部分分 , 然后思考64分的做法 , 我发现36分做法中的动态规划是可以用数据结构优化的 , 于是写了个动态开点线段树 , 却一直没通过样例。 在调试的时候我发现并不需要线段树 , 直接树状数组维护就行了。 然后又发现它甚至连树状数组都不需要 , 只要记录后缀最值 , 就可以实现O(log N)的转移
我完成这个做法的调试时已经过了很长时间 , 我先想了一下这题的88分做法 , 感觉就是要推出一些性质 , 然后用数据结构 / 决策单调性 / 单调队列之类的东西优化一下。 然而我并没有具体的思路 , 考虑到时间已经过半 , 决定先看T3
T3的40分就是枚举删边 , 对于两棵子树分别求树的重心。 我先写了这一档部分分。 然后发现第二档部分分也比较好做。 只需将这条链记下来 , 然后求中位数就行。 没想到我因为程序里漏打了一个return调试了很久。 导致只剩下了20分钟。
这时我决定保险起见 , 反复检查了文件 / 程序大小 / 数组越界 / 空间超限等问题。
最后5分钟 , 我想出了第一题的正解。 然而已经来不及了。 非常难受 , 思考了一下人生。
估分84 + 64 + 55 = 203
出考场问了一下不同人的得分 , 今天的试题区分度很大 , 有高手拿了250+的 , 也有100+的 , 还有没考到100分的 , 然而我校选手只有3人超过150分。
回来的路上突然想起d1t1 n = 64的情况我是全错的 , 最低只有50 , 于是在担心中度过了2个星期 , 好在出题人没有***难我 , 最后只给了一个n = 64的数据。
[成绩]
我的最终得分是95 + 100 + 10 + 84 + 64 + 55 = 408分 , 排进了江苏省前40 , 拿到了常州初中生中的第一 , 并且也基本拿到了北大冬令营 , apio , ctsc的资格。
刚开始有些开心 , 然而仔细想想觉得也没什么 , 前方还有很长的路要走 , 我与高手间也还有较大差距 , 况且这次比赛我也没有发挥到最好 , day1的失误和day2的过于保守都使我吃了亏。
[总结]
- 多做codeforces , poi , agc的题 , 提升思维能力
- 多阅读经典书籍 , 多读国家集训队论文
- 提高程序的一次正确率
- 多学算法 , 多做题
[写在最后]
"长夜漫漫 , 愿你我能摸黑赶路 , 亦能发亮如星"。 愿自己 , 继续努力 , 不辜负心中梦想的声音 , 在这条路上走的更远。
愿天下所有的Oier们都能有光明的未来。