信息学竞赛考什么

息学竞赛的考察形式分为笔试和上机两种形式。不仅是信息学竞赛,包括计算机考级、大学生程序设计比赛、信息技术高考等相关考试竞赛的形式也无外乎这两种。信息学竞赛以上机测试为主,但是笔试也是重要的组成部分。

信息学竞赛的笔试

信息学竞赛无论普及组还是提高组,初赛的形式是笔试,在固定的时间内完成一份试卷,原则上不允许使用计算器但是因考场而异(信息学竞赛比赛流程管理混乱不是一日两日的事情了)。批改是按照市级赛区统一批改然后统一划线决定复赛名单(当然也有城市是将参赛名额分到学校,学校校内进行批改决定名额,虽然这么做是违规的)。

信息学竞赛除了初赛是笔试以外,NOI全国决赛也有100分的笔试环节,全部都是选择题。不过这个题库是提前公布的,选手可以记忆题目通过笔试,所以如果不是因为个别选手手滑太严重,这一部分并不会有什么区分度。

信息学竞赛的上机测试

复赛、省选以及冬令营、APIO、CTSC等竞赛,以及NOI的主要比赛,都是上机测试,上机测试是信息学竞赛的重头戏,能直接决定你能获得什么奖。根据比赛的不同,每场上机测试限时3-5小时,需要完成3-4个题目。NOIP提高组、NOI和某些省选会分2天进行两次上机测试。

上机测试的题型有多种形式,但是无论是什么形式,本质上都是要求你编写程序,可以将给定的输入数据按照题目要求处理成符合要求的输出。

最常见的试题形式叫做“传统题”。传统题是指给你一个题目描述、输入输出格式、输入输出样例(有时会给你样例解释帮助你更好的理解题意)以及数据范围,你需要根据这些信息编写出一个程序,能够将给定的输入进行处理,然后输出答案。

信息学竞赛的语言

说到编程,很多人就会想出Java、C++、Python、PHP等常见的工程语言(下图给出了工程中排名靠前的语言)。但是实际上在信息学竞赛中,并不能使用所有的语言。现在(2018年)国内的信息学竞赛只能使用C语言、C++和Pascal。早期的信息学竞赛还能使用BASIC。但是因为一些原因,从2022年开始NOIP将不再允许使用Pascal和C语言。

而在国外以及IOI可能还能使用Java等语言,至于国内是否能够解禁新的语言现在不知道。所以说想用Python来参加信息学竞赛的话可能就会让你失望啦。因此如果想问需要学习什么语言,那么唯一的标准答案就是:C++。

但是,语言之间并不是互斥的。很多选手能够掌握两门甚至更多种类的语言;实际上只要学好其中一门语言,在学习新的语言就会容易很多。即使初期可能会有一些混淆的习惯但是并不用太担心,写多了后自然就能信手拈来。

说到底,在信息学竞赛中,语言本身只是为了解决算法问题而使用的工具,即使是我们钦点的C++,实际上我们能用到的语言特性也只是C++中的一部分(我们经常笑称我们学的实际上是C with STL)。所以我们需要学习C++语言,但是我们并不需要精通它(实际上也做不到)。因此学习算法竞赛的错误入门姿势是阅读砖头厚的《C++ Primer Plus》等大而全的书籍,因为我们只需要学习最基础的一些语言特性就足以使用了。

需要了解计算机本身

除了语言,我们会稍微涉猎计算机构造原理的知识。我们需要知道数据在计算机中是怎么表示、储存、运算、演示的。这不仅是信息学竞赛初赛的考点,也会让你更加了解计算机的结构,并且优化算法。

至于写游戏写网站这种应用程序倒不是信息学竞赛涉及的内容(虽然初赛的确考过HTML语言,但是非常久了)。只不过了解语言和计算机原理本身的话,对于学习编写“实用”程序,了解软件工程,还是有好处的(见本系列上一篇文章)

最重要的部分是数据结构与算法

信息学竞赛的核心就是数据结构和算法了。通俗的来讲就是通过编写程序,将输入数据进行自动化处理的方式,可以解决一类确定的问题。

数据结构和算法知识相当广泛,也有难易之分。一些算法和数据结构是前辈(可能是数学家、计算科学家、甚至是算法竞赛的选手)创造和优化的。我们会合理利用这些算法知识来编写程序解决问题,甚至自己创造一些算法。学习这些算法是训练竞赛的最重要的部分,需要耗费大量的时间和精力。

对于初中普及组来说,需要掌握排序、简单图论、简单贪心、简单动态规划等算法。而对于提高组选手来说不仅需要掌握普及组的要求,而且从深度和广度还要更深,必须需要学习更多种类的动态规划,了解更多的数据结构(线段树、二叉堆等),对思维的要求也更高。至于省选级别的,需要掌握的知识也就更多了。

你可能感兴趣的:(信息学竞赛考什么)