一、信息学竞赛初赛
1、初赛内容
初赛偏重于基础知识。
一部分是计算机的基础知识。计算机基础部分,内容多而杂,多以选择题形式出现,所以不必要花太多时间去背,而是平时多积累,有意识地去记忆,留下印象。内容会包括计算机的特征(硬件和软件)、网络的特征和基本概念、信息的输入输出、信息的表示和处理、新兴应用等。
另一部分是数学内容。范围很广,永远不知道会考到哪一部分的知识点,但试卷包括两道数学题,所以不能忽视。比较重要的大概包括排列、组合、辗转相除法、容斥原理等;数据结构会考基本类型(整型、长整型、浮点型、字符等)和数组。比较容易在初赛中出现的数据类型有树、栈、队列等。树:二叉树、完全树等;栈:先进后出特点;队列:先进先出特点。
最后一部分是程序完成(也就是算法)。这部分完全是靠你的做题基础,没有捷径,只能靠你平时多做题,掌握简单算法。
下面是小编整理的比较常见的使用算法:
①模拟算法
②贪心方法
③数论算法
④图论算法
⑤动态规划(分析:背包问题)
⑥分治算法
⑦搜索算法(fx:暴搜——枚举、打表、加剪枝(剪枝以排序、可行性剪枝和暴力剪枝为主。))
更具体的算法总结,还是去买相关算法书籍来看,再有就是多刷题练手。
2、初赛试卷形式
初试形式为笔试,编程使用的语言为pascal、C、C++中的一种或多种,三种语言在信奥中的使用差距并不明显。在掌握算法和数据结构后,换语言如同换衣服。但是以后信奥赛只会使用C++。
(1)选择题:共20题,每题1.5分,共30分。每题有4个备选答案。试题内容包括计算机基本组成与原理、计算机基本操作、信息科技与人类社会发展的关系等等。(普及组为20道单选题,提高组为10道单选题和10道不定项选择题,不定项选择题与答案完全一致才得分,多选或少选均不得分)
(2)问题求解题:共2题,每题5分,共10分。试题给出一个叙述较为简单的问题,要求学生对问题进行分析,找到一个合适的算法,并推算出问题的解。答案以字符串方式给出,考生给出的答案与标准答案的字符串相同,则得分;否则不得分。
(3)程序阅读理解题:共4题,每题8分,共32分。题目给出一段程序(没有关于程序功能的说明),有时也会给出程序的输入,要求考生通过阅读理解该段程序给出程序的输出。输出以字符串的形式给出,如果与标准答案一致,则得分;否则不得分。
(4)程序完善题:共2题,每题14分,共28分。题目给出一段关于程序功能的文字说明,然后给出一段程序代码,在代码中略去了若千个语句并在这些位置给出空格,要求考生根据程序的功能说明和代码的上下文,填出被略去的语句。填对的,则得分;否则不得分。
二、信息学竞赛复赛
1、确定你的语言
信奥包括三种语言C/C++/pascal,在最初必须确定自己使用的语言。没有C/C++基础的,个人建议使用pascal,因为它更容易上手,如果有充裕的时间,则建议C++,因为它们对你今后的程序编写,更有益处,且以后信奥赛只会使用C++。
2、从排序入手
排序是基础中的基础,快速排序是必备本领,方法就是背下来。C/C++是自带快排的,因此很轻松。多关键字排序和稳定排序也是必须掌握的排序知识。
3、贪心和穷举以及模拟——最简单的程序
想得奖,必须掌握贪心和穷举以及模拟,虽然不能让你得满分,但可以给你拿到30-60分。它们是你想不出更好算法时的救命稻草。
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。但是贪心是可以得分的。
枚举算法是指,列举出所有可能的取值,从中找出最优解。
模拟算法是指,通过逐步进行操作、逐步判断来推断是否符合题目中所给出的情况。非常耗时,一般不可能得到最优解,但是可以得到部分分数。
4、用动态规划来训练思维
比较难,对思维的周密程度和逻辑要求非常高。可以用来训练思维,对于学习时间短的筒子,动态规划可以帮助你迅速进入编程状态,也有助于帮你发现题目背后可能隐藏的更简便的算法。
动态规划主要的思考规律应该如下:
定义函数(动态转移方程中转移量的定义)——建立方程——确定初值和边界
提醒!考场上想不到动态转移方程,请选择贪心、枚举或模拟等方法来获得部分分数。动态规划最后得出的答案不正确时,也不要耗费大量时间来找出错误,因为这非常难,也非常耗时间,得不偿失。
5、学习简单的图论
包括:(单源或多源)最短路和(最小)生成树。
最短路中需要学习Dijkstra算法和Floyd算法。近年来图论题目越来越难,知识点越来越多,所以时间不够,请掌握这两种。
最小生成树需要掌握Prim算法和Kruskal算法。前者适用于稠密图,后者适用于疏密图。两者可以比较学习,看到它们的优点和不足。
6、常用的数据结构一让程序更快一点.
最常用到的是堆(优先队列)、并查集以及树状数组堆。
堆:只