过程
开题,首先先把除了第三题的所有题看了一遍。(由于第三题太长,先放着后面再看)
决定顺序先把一二题做了。
看第一题,小小思考了一手,发现暴力可做,于是飞速码完,小小对拍一下,没啥问题,此时过了半个小时。
于是看第二题,首先想到一个做法,于是开码。
码完后发现大样例有点问题,仔细思考一下,发现做法有点问题。
思考了一下,发现了一个性质,然后结合一下之前的代码,过了大样例,此时过了一个半小时。
然后看第三题,题面真的很长,看完之后脑子晕乎乎的,有点深奥,按照着当时的理解开始慢慢码。
加上看题花了大概一个小时码完并且调过了第一个样例,结果第二个样例挂了,模拟一下样例后才发现我理解错题意了。
心态有点崩,出去上个厕所冷静一下,回来重新理了一下思路,其实跟原本的代码实现很像,就是细节的区别,但是我怕我改细节的时候漏改,于是打算重构。
重构完后一遍就过了所有样例,但是此时只剩下三十多分钟了。
去看第四题,思考了五分钟左右就想到做法了,感觉代码不是很难实现,于是决定去打想到的做法。
码完后快结束了, 但是没有过,来不及调了,只能检查一下前面的文件输入输出,遗憾离场……
晚上看估分,发现第二题挂了,于是乎返回去看代码。
发现数组开了 1 0 6 10^6 106,但实际它的数据范围是 2 ⋅ 1 0 6 2\cdot 10^6 2⋅106,于是挂了 15 15 15 分……
总结
这次考试不是很如意,每一道题对于我来说都不是很难,可是因为各种各样的低级失误导致我的分数并不是很理想。
第一个失误就是开数组的时候看错取值范围导致数组开小。
这个错误就是不应该出现的,当时我应该是想到做法急着去打,然后想当然的认为它的数据范围就这么大,然后导致出现了这种错误。
这种错误有很多方法去避免,比如说每次开数组前都去看一下数据范围,考试的最后检查阶段再去看一下数组应该开多大。
第二个失误就是看错题目导致先前打的代码全部没有用。
由于它第三题的题目实在是太长了,导致我看了两三遍才大概看懂了题目,并且看完之后脑袋晕乎乎的,对于里面很多的东西都没完全理解透,然后想当然的去打了,打完没过样例才发现有问题。
这个的解决办法其实也比较简单,如果真正遇到了这种题目描述巨长然后又及其难以理解的题目时,可以考虑利用好小样例,最好能够用小样例来模拟一下。
但其实很多时候由于样例太小导致其很特殊,对于理解题意也不一定有很大的帮助,而这次的第三题的第一个样例就是这种很特殊的样例,我也是看第二个样例,恰巧第二个样例不大也不是很特殊,所以才能够发现自己题目理解有问题。
还是要锻炼一下阅读题面的能力,有时候可以将冗长的题面转换为简易的数学语言,这样更有助于理解题目。
并且对于冗长的题目并不能畏难,要多看几遍,如果看题目的时候脑子比较晕乎乎的,最好出去洗把脸再回来重新阅读题面,这样才能在清晰的情况下完全理解题目的意思。
第三个应该算问题就是在最后的时间想到正解,是去打正解还是去打暴力。
其实这个问题比较难解决,因为这有关于题目的难度和剩余的时间。
这次考试最后剩半个小时的时候我想出来最后一题,其实这个时候就不应该去打正解了,因为其实半个小时打完暴力才有剩余的时间留下来检查,但是如果你去拼正解,对于半个小时来说,其实很难能够打出来代码,并且你并不能保证你能一遍过,大概率还是需要调试的,而且半个小时你打出来正解之后其实并不会留下来太多的时间去检查前面的代码,这其实是非常不划算的。
在我看来,只有当你能在打完之后还剩下半个小时的时间的时候才去拼正解,否则的话最好还是老老实实的打满暴力,然后检查前面的代码,这样子至少你能在每次考试中拿到不俗的分数。
第四个就是实现代码的速度。
这个主要体现在第三题,我实现这道题的时候花了很多时间,就是你明明知道怎么打了,但是你打代码的时候总是因为各种各样的原因而停下来,不能做到那种一气呵成,这就需要我多做题,多刷题,锻炼自己思维的速度,让我在实现代码的时候不至于卡壳。
以此看来,其实我的比赛经验还是不够多,并且做的题数量太少了,使得我不能够很快的解决问题,后面肯定要多刷题,将每次模拟赛都当做考试来对待,积累经验,争取在每一次模拟赛和考试的过程都做到没有任何不该犯的低级失误。