初学者怎样学好信息学奥赛C++竞赛?

2023-05-19 16:25:50   

01




不要因挫折而气馁

同学们学习信奥赛时需要先学习 C++ 这门编程语言。和学习中文,英文一样,要学习第三门语言,就注定会在学习初期犯下不少因为不熟练,不完全理解而产生的程序中的错误。这个时候,同学们可能会因为迟迟无法发现自己的问题抓耳挠腮,甚至暴跳如雷,对信奥赛的学习产生厌恶的想法。

其实,哪怕是同学们熟练掌握了 C++ 编程语言之后,在学习解决问题的算法时,这一情况可能也会时而发生:从学习完一个算法,到写完并调试出对应的正确程序代码,中间有非常多的磕磕绊绊。同学们甚至可能需要把自己的错误程序一步一步改写成接近于标准答案的模式,才能够发现自己错在哪个隐蔽的地方了。这是一个漫长而痛苦的过程,但如果仅仅因为一时情绪波动,那只会让自己止步不前,无法获得蜕变和成长。每一位经历了痛苦的 debug 过程的同学都能感受到,在历经千辛万苦之后发现的程序错误,未来几乎不会再犯第二遍了,颇有拨云见日之感。

02




重视练习与实践

信奥赛的学习与传统学科有一大不同:解决一个问题的思路容易解释的清,读的懂,可是问题的难点往往在于要将想法切实地落地转化成拿到 100 分的代码,而如果同学们只是板板正正地做到上课认真听的要求,而疏于平时编码的练习与实践,就很容易陷入眼高手低的不利境地。

如果要给编程归类,那它一定是一门实践性学科。因为编程所需要的理论知识,光靠死记硬背没有实际意义,学习编程最终总是要和编译器和运行环境打交道的,否则就是闭门造车。就像上文所说的一样,逼迫自己去创造,去产出,才能在这个过程中发现自己有待提升的能力并强化之,达到查漏补缺的效果。

03




不要轻易看题解

信奥赛与其他学科的另一大不同是,由于信奥赛的试题以及答案都以互联网为媒介,因此同学们非常容易地就能从网上找到相应试题的答案,如果一位同学因为偶然的机会尝到了复制粘贴答案来省时省力的甜头,又没有外力的严厉遏制,久而久之,他只会因为贪图廉价的获取 100 分的快感,而随着课程进度的推移,逐步丧失自主思考的能力,并陷入不可逆的落后中。

若要防止在学习信奥赛的道路上发生这一最坏的情况,就需要同学们做到“延迟满足”,而这一要求不仅仅在信奥赛的学习中适用,在成长道路的任何一环,都需要同学们戒骄戒躁。这实际上需要信奥学子们在平时的练习中,锤炼磨砺自己的心性。只有当一道题自己尝试了长达半小时,仍然没有任何思路上的进展时,才说明自己一定是有一种解决问题的套路还没有掌握,需要扩展学习了。

04




平时多阅读例子,多思考反例。

信奥赛的试题对于输入数据有严格的格式要求,因此一道信奥赛试题除了信息量较多的文字题面,还有一眼望去有些不明其义的抽象的输入数据。但一组具体的输入数据,实际上就是给出了一个问题处理的实例:同学们应该对着输入数据,把对应的流程图一步一步地画在纸上,才能够更加充分地理解清楚题目的意思。甚至有的时候,通过样例数据及其解释,能够比阅读文字题面更加快捷地明白题目的含义。

不仅要关心题面给出的例子,还要勤于、善于构造题中没有的,且可能使得自己的算法和程序出错的例子。这实际上是对同学们的考场思维提出了更加进阶的要求:真正的比赛环境不比平时的练习场,一道题是对是错,无法当场通过得分来得知,只能自己想办法验证。而平时练习更多,踩的坑也越多的同学,在这一环节自然就有无可比拟的优势了,正所谓久病成良医。缜密的思维是保障考试实际成绩符合自己预期的关键。