发布信息

信息学奥赛c++初学者学习指南

作者:jypxw      2022-03-21 13:42:01     409   

信息学奥赛c++初学者学习指南

  很多家长想了解如何参赛?学到什么程度能参赛?今天给出几点建议:

  #1

  给竞赛初学者的建议

  对于刚参加信息学竞赛或还未决定是否要开始参加信息学竞赛的学生和家长,主要有以下两点建议。

  ●01:培养兴趣为前提

  信息学竞赛与其他竞赛有所差异,其他竞赛可能主要是为了考虑,而信息学竞赛更多的是在影响学生的长远发展。

  在早期,建议还是要以培养学习的兴趣为主,不需要给自己施加过大的压力,或定太高的目标,比如“一定要拿到一等奖”、“一定要进省队”、“一定要拿到”等等。

  ●02:多写程序

  信息学竞赛相较于其他竞赛来说,对选手的实践能力要求更高。

  比如在数学竞赛中想要得分,选手只需要把自己解题的过程写到卷子上。但是在信息学竞赛中想要得分,选手除了需要解出题目的算法,还需要把这个算法写成程序,并且这个程序需要能够通过所有的测试数据。

  所以建议所有的初学者在做题时,不论题目是简单还是难,都不要只满足于在纸上想出算法,要更多得去上手,去完整得实现代码。

  曾经很多选手都犯过这个问题

  平时觉得题目简单就不去写代码,久而久之就养成了习惯。但到比赛时,在实现代码的过程中就遇到了很多问题。

  在纸上想出算法和写出真正能运行的程序之间还是有一个不小的距离。

  #csp参赛建议

  初赛准备建议

  ●01:夯实基础

  CSP的初赛并不是一场能实现突击的比赛,因为它主要考察选手的基本知识储备。

  所以要想在初赛中获得较好的成绩,选手们需要具备一定时间的知识积累。

  如果刚接触信息学竞赛才不过几个月,就去报名了初赛。

  虽然在竞赛前会花好几周的时间去做突击训练,但由于知识储备不充足,较终通过初赛的几率还是比较小的,提别是2019年之后,更加注重参赛选手的丰富的知识储备。

  所以建议大家不要过于着急,把基础打好后再去参加初赛,取得好成绩就是件水到渠成的事,如果你想练练手,熟悉一下规则,增加一下经验也是可以参加的,但是要保持好良好的心态。

  ●02:初赛题目类型

  CSP的初赛题目主要分为以下三类。

  1

  选择题

  主要考察选手对基本算法及编程基础知识的理解。

  主要依靠选手的平时积累,需要选手在平常训练中掌握较好的学习节奏,尽量去全面覆盖知识点。

  2

  几道数学题

  解题需要一些数学的具体技巧,大部分都是一些比较基本的技巧,比如排列组合等。

  一般情况下难度不会太大,平时只要多做一些相关题目即可,但是关键在于一定要细心。

  3

  阅读程序与完善程序

  这类题目对于实际编程经验要求相对较高,关键在于读懂题的目的,不能很机械性地、局部地看题。

  一般初赛选手较害怕的就是阅读程序写输出的题目,尤其是一些比较复杂的题目。其中特别是一些递归程序,当它一层一层得自己调动、自己递归下去时,所以都会很头疼。

  如果用常规的办法:

  先在草稿纸上一行一行得去模拟代码执行、去跟踪所有变量运行的值的变化。

  程序简单时其实情况还好,但当程序开始变得复杂,递归很多层后,时刻去跟踪、调整、记录每一层的变量会导致我的工作量变得很大,错误率也会随之提高。

  其实仔细思考发现并不需要一行一行得模拟程序运行,更关键的是先读懂程序的目的。

  比如写了一个程序后去阅读程序源代码,然后发现这个递归程序其实是去解一个斐波那契数列的第N项。在理解程序的意思后再去观察一些比较简单的输入,就会发现这个运行的结果和之前的理解是一致时,就可以大胆得对程序的理解直接去得到输出。

  程序填空题其实也是如此,我们同样要把整个程序先读一遍,再特别认真读一下题干,当理解题目在干什么后,再针对性得去思考每一个空的目的。

  初赛赛题即使不能完全看出程序的意图,也是能通过代入法、反例法等方法拿到大多数的分数。当然,这是要建立在同学会带入数据,有阅读程序经验的基础上。

  由于初赛的程序不是由我们自己编写而是试题提供,部分程序不能完全分析出程序的意图(看不懂)其实很正常的,特别是阅读程序的问题,完善程序题目会交代程序的意图,相对来说会好一些。

  面对这种情况,同学们要掌握的方法是代入法,直接将选项代入题目,检验每个选项的正确性,这是较基础较简单的方法。「基本上」适合所有题。

  反例法/反证法则更适合于判断题,或者选手在考试中认为错/对但是不知道怎么证明的情况。

  使用反例法的时候一般需要思考一些边缘情况(在阅读代码和完善代码中则需要结合代码)尝试去制造反例,很多时候一组很小的数据就可以成为反例。

  而反证法则是假设命题为假的时候去推测可能产生的矛盾。

  由于大家平时大多数情况下都是自己构建思路、自己编程,因此部分同学的程序阅读、模拟、分析能力会偏弱,这个需要通过反复训练,学会总结和寻找规律

  复赛准备建议

  ●01:每一次的练习都是准备

  复赛不像省选及性决赛那样以选拔为目的,它的难度不会很大,较重要的是考察选手对基础算法和数据结构的掌握情况。

  每年复赛所考察的算法虽然对深度要求不高,但是对广度的要求还是较高的。

  所以建议,在备赛阶段不要太过于钻研某一个算法,或太纠结于某一个较偏门的问题,还是要以打基础、查漏补缺为主,注意知识点的广泛度、完整度。

  ●02:比赛策略

  想在复赛中取得好成绩的一个关键——在有限的时间内尽可能拿到所有自己会做的分数。

  复赛会有很多分档的分数,我们在做题时不要一开始就看的数据算,要多看一看前面小的数据范围,如70%、80%。

  一般复赛的较后一题,可能的数据范围会比较难,但是60%、70%或80%的算法可能会比较简单。换句话说,就是可能可以用一些暴力程序拿到70%的分数,而这部分就是你一定要拿到的分数。