10.25 上午 省常中模拟赛
比赛题目刚发下来,看到出题人之后我就变得紧张起来,因为暑假的时候也做过一份他出的题,题目难到连全场最高分也不过 100 多分,所以又一次做到他出的题难免有些心理阴影。
这种心态直接导致了我在第一题上的失误。由于在心里认为这场模拟赛的难度应该较高,导致我对于第一题几乎不假思索就认为是动规,而根本没有往更简单的方向去想。我一开始想到的是区间动规,但是发现只能拿 50 分,想了一会儿还是没什么思路,于是先把区间动规打好然后打第二题。
第二题是一道比较不错的题,但是由于强的数据不好出所以只要暴力加上优化就能轻松 AC。而我当时并不知道数据强弱,于是抱着拿部分分的觉悟很快写完了暴力,并没有在这道题上多耗费时间。最后结果也是挺让人惊讶的。
第三题其实不难,尤其是与 NOIP 的第三题相比较更是显得容易。但是第三题的题目描述以及输入十分繁琐,直接导致了我的烦躁心里,读了很多遍题目才理解了题意。在这种状况下我下意识地认为第三题是很难的题目,而 60 分的分数又是可以轻松拿到的,于是我没有多想就把 60 分的部分写完,然后把第三题放在了一边。考试结束之后还是有些后悔,因为其实只要稍微思考一下不难想到正解。
打完三道题的骗分部分大概用了一个多小时,然后开始想第一题的满分算法。用了很久想到了线性动规,复杂度完全没问题,但是实现以及调试又花了很久,而与之前写的区间动规对拍发现有不一样的地方,然后手工模拟了好几组数据,最终发现一开始写的区间动规居然是错的。之后我就没法对拍了,只能对比较小的数据手工模拟对拍,而在手工模拟的时候发现,每次从左往右直接模拟得到的答案居然和动规得到的答案一样。抱着尝试的心态我用栈实现了一下模拟算法,然后对拍发现动规和模拟对上了。动规我调试了一个多小时,一百多行代码;而模拟只要一个栈,代码长度不超过 20 行。这时候已经没有时间再去写第三题了,因为第三题即使想到了,要实现也是需要不少时间的。
然后又转向第二题的一些小优化,第二题优化写完差不多时间结束。
总体来看我的策略还是正确的,先拿暴力分,再想满分算法。如果我当时没有放弃第三题而去专攻第三题的话,也许第三题能 AC,但是很可能会失掉第一题的大量分数(因为一开始的区间动规写错了)。而事实上第三题我只写了十分钟的代码就拿到了 50 分,性价比还是很高的。
但是不足的地方就在于心理状态。畏难心理导致错误估计,以至于花了太多的时间在最简单的第一题上。如果能够静下心分析第一题,应该不难想到模拟算法的正确性。
10.26 上午 学军中学模拟赛
和前一天一样,看到出题人的名字之后顿时紧张。
然后开始看第一题,看了几遍之后没有看懂。
然后看第二题,发现是贴吧上某人求助的题目,自己曾经看到过但是完全没有关注解法是什么,所以比赛的时候就开始感到后悔。题目很好懂,但是完全没有思路,感觉最多只能骗到 10 分。
再看第三题,静态区间查询。线段树是我比较熟悉的数据结构,所以也有想到过线段树,但是并没有细想。看数据范围发现 70 分很好拿,于是按照往常的套路写了 70 分的算法,自己出了几组小数据检查了一下发现没问题,然后开始做第一题。
对第一题手工模拟了几组小数据,发现了一点规律,有点子问题的样子,于是毫不犹豫写了 DP 方法,感觉能拿 50 分。再继续乱搞,发现其实很多状态完全用不到,而且有点辗转相除的意味在里面,所以写了一个类似于 GCD 的算法,只是改成了辗转相减,对拍发现没有问题。这时候开始有了一点信心,感觉第一题能 AC。但是结束之后跟同学讨论发现如果遇到极限数据,辗转相减很可能会超时,最好还是要辗转相除。不过数据出得比较良心,还是 AC 了。
对于第二题还是完全没有任何思路,于是又看第三题。然后发现线段树完全可以搞,于是很开心地写了线段树。因为熟悉所以一次就写对了,然后对拍发现没有问题,常数也还过得去。
做完一三两题也没多少时间了,对于第二题依旧毫无思路,只好写了 10 分的算法。
对于这场比赛,首先是犯了和前一天一样的毛病,就是畏难。不过还是遵循了先写暴力的原则,保证了基本分,然后想满分算法,所以拿了不错的分数。而第二题来不及思考,还是有些遗憾。
10.26 晚上 UOJ Test Round 1
这是我几天以来做得最差的一次。
第一题是送分题。我看到的时候很高兴,想都没想就打完了代码。然后发现是错的。这时候心态就已经有点失衡了。删删改改之后过了两个样例,于是就去打第二题了。但是最终第一题只拿了 70 分。而满分算法其实只要在我最开始的错误代码上稍加修改即可。
第二题就稍有点难度了。我想了很久,遇到了瓶颈之后就再也没有进展了,耗了一个多小时最终还是决定放弃整场比赛。因为这个时候已经状态全无了。
第三题当然也就没有去看。
自己在这场比赛的表现很值得一说。首先,对于第一题,几分钟打完代码却发现样例过不了,这的确是不小的打击,直接影响了心态。然后我想都没想就把错误代码全部删掉重打。这种做法其实是完全没必要的。如果我当时能够再稍微想一下,完全能够在稍加修改的基础上轻松 AC。
对于第二题,我一开始就是奔着 AC 去的。目标太高导致我想不到正解就开始焦虑。这其实是很多人有的通病,就是没有弄清目标。关于这一点,CLJ 曾经在贴吧里总结过,他在某一年的 CTSC 中由于只想着拿第一,导致完全打乱了原来的良好的做题策略与习惯,最终失利。从我自己来讲,我的目标是一等而不是满分,我应该尽量多拿分数而不是想着如果 AC 所有题目,更何况自己根本没有拿满分的实力。如果我当时想的是如何拿最多的分数,那么对于第二题也许我会选择一个只能得 60 分的算法,但那也远比后来的结果好很多,至少会去尝试做第三题。
所以,对于以上三场比赛总结一下就是:
1. 明确目标,摆正心态,尽量多拿分数;
2. 先写暴力,后写正解,尤其是对于自己的算法不确定时更不能轻率;
3. 权衡得失,写性价比更高的题;
4. 要有自信,不要畏难。