sc2017新初三膜你赛6 比赛总结

这次居然突破了自己 rank3 的魔咒,成功跻身 rank2。不过,从分数上看,70 + NaN + 30 = 100,仍然不满意。像 lgj 说的,赛场上居然没有人 A 一题。
赛后跟同学交流完,其实前两题都不难编。至于第三题,则需要有坚实的数据结构的基础,能分析后转化问题的能力。这个,或许就是我目前最为欠缺的。

比赛一开始看了下,T1 和 T3 貌似是数据结构题,T2 是数论?脑抽把幂的符号(因为 smoj 不支持上下标,用“^”代替了)看成了异或,推样例怎么都推不对,有点慌。后来想了想,应该不大可能考 xor,然后突然发现这是幂的符号。浪费了好几分钟,还弄得整个人的心理状态一上来就很紧张。
决定先搞搞 T1。花 10min 打了个暴力,交了之后第一个点过了。极限情况是 O(n2) 的,也就意味着应该是 50 分。
因为之前也 yy 过一两道数据结构题的玄学优化,效果好像都可以,最起码能多拿 20 分,于是就开始推 T1 正解。

推了十几分钟,脑子灵光乍现(其实是突然一抽),搞出了一种 log 平方的做法,开始码。但是因为很多地方没想清楚,打完,调到过样例,整整花了 1h。考虑到结果可能会很大,也很多。当然是选择手动 IO 了。
交了之后也过了第一个点。想接着去做后面题目的时候怕有点不稳,恰好又有暴力,就打了个数据生成器,对拍了一下。没想到小数据都拍出了问题。

手算了一遍,发现暴力的结果是对的,也就意味着我的玄学搞法肯定写错了。要么算法本身就有漏洞,要么实现上出了点偏差。我当然更希望是后者。
开始静态查错,没发现逻辑上和实现的细节有什么问题,于是单步调试。
到一个地方的时候,得到的值就跟自己想象的不一样了。模拟了一遍,愉快地发现自己的理论有硕大的漏洞
这时候再来补,能补得上吗?怎么补?心里很烦躁。这样肯定会影响状态,倒不如先放轻松,再回来想。于是出了机房,到天台转了一圈。
再回来的时候想到了补救的方法,但是比较麻烦,会使空间占用和常数都变大。权衡利弊之下,决定还是照这样补。
弄好了之后马上再对拍一遍,没什么问题。又构造了一下极限数据,发现 T 了。那也没有办法,只能是硬着头皮就交上去了。

因为没考虑到会有奇怪的情况,自以为一定是正确的,我白白浪费了好多时间,在 T1 上面整整耗了 2.5h。
比较之下,感觉 T3 更难,试图推了 30min,没什么想法。直接交了个暴力,第一个点也过了,就不去理它了。(然而暴力也有讲究,我的代码膜太多了……)
现在集中精力推 T2。先是打了个 O(n4) 的暴力,样例都会 T,当然不交。更何况看到赛场上交了的连第一个点都没过,猜想也是暴力。
分类讨论了一下答案的种类,试图找到一些规律,进行转化,推出了 O(n2n) 的做法,但还是会 T,并没有什么用。
想着会不会能过前面的一些小数据,于是先跟暴力对拍一下。不幸的事情发生了,到 n = 十几的时候得到的答案就不一致了。
于是开始调,看是过程中哪一步出了问题。到某一步,觉得似是而非,隐约像出了点偏差,就改了那里。重新拍,又有不一样的小数据。
周而复始,某几个地方被改动了几次,思前想后,又觉得好像没有什么问题。就在我这样纠结着,调着的时候,比赛结束了。
(后来我发现其实是暴力打错了,我的做法虽然慢,但应该不会 WA,答案不一致的真相是:暴力的幂运算溢出了。)

按下 F5 刷新成绩页面的一刻觉得自己绝对要炸了,但下一秒看见 rank2 的时候又觉得不可置信。但看各题得分,T1 70,T3 30,都在预料之内,差不多吧。
突然 aspe 大叫一声,T2 过了!可惜,比赛已经结束 20s 了。这种情况实在是很令人惋惜,但又不得不思考:为什么不能提高之前的效率,哪怕是一点点呢?
闲话休题,还是反思自己的表现,总结一下这场比赛过程中的得失。

第一个,一定要想清楚再开始写代码。就像 cdc 一样,整理好思路和框架,不要边写边想,编码效率极低,还不如花几分钟理顺流程,写起来一气呵成。
第二个,在时间允许的情况下,写完代码一定要静态查错。编译通过之后,不去试样例,只是安静地从头到尾把自己的代码阅读一遍,不能遗漏任何一句,任何一个量。检查变量是不是打错了(两段相似操作如果直接复制,可能会导致变量含义相反)、数组开的够不够大(切肤之痛,无向图的边集数组开两倍!)、程序的逻辑性是不是还存在问题等等。这个时候,一般是很容易发现错误的,并且还会有一种成就感。但是如果马上测样例,可能样例是过了(因为样例通常是比较弱的数据),而程序却漏洞百出。又或者测样例都错了,这个时候会严重影响心情,再去查错的话,事倍功半。
如果说还有一个,就是我一开篇就提及的,对所学知识的透彻认识,分析和转化问题的能力。像这次的 T3,我知道是线段树,但完全不知道如何实现。听 lgj 讲完之后,茅塞顿开。(但是代码硕难写)应对这类题目,就需要培养:将赛场上的考题剥茧抽丝,返璞归真,透过现象看出本质,通过不断转化最终变为已学范畴的能力。如何培养?对经典问题的多思考,想想可以怎么变形。分析题目的时候尝试抽象出数学模型,思考是否学过类似内容。

道理都懂,但最重要的是自己要将反思到的东西付诸行动。“纸上得来终觉浅,绝知此事要躬行。”

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013686535/article/details/77235815
个人分类: 比赛总结 SMOJ
上一篇[SMOJ2104]树
下一篇[SMOJ1868]bst计数
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭