信息学奥赛第二轮考试大部分是Linux环境。
使用的是官方的 NOI Linux,是带界面的操作系统,系统使用上和 Windows 差不多。有的省市使用的是虚拟机 Linux,也是一样的。
重点是选手要会使用 Code Blocks 编程软件。因为Linux上主要的编程软件就行它。
正式开始考试前是有机试的,20分钟,所以可以先熟悉编程环境。具体考试流程参考下方图片。
3、拒绝爆零
总共 4 道题,每题100 分,共 400 分。大部分省市 200 分就可以拿一等奖(给大家点信心)。
每道题都有对应的文件名称、文件名称,直接复制粘贴过去,注意大小写。比如去年的试卷。
4、必背代码模板
以 “小苹果” 为例,文件夹是 apple
,在这个文件夹中:
apple.cpp
;apple.in
、输出文件是 apple.out
;apple.cpp
文件的代码格式:
5、合理骗分最简单
最重要的四种解题策略。
第二轮考试总共4道编程题,可以按优先级顺序使用这4种策略,尽可能的多得分。会的题使用第一种策略可以拿100分,不会的题使用第四种策略可以得10分。
我们先讲最简单的第4种策略:答案直写。
当我们分析一道题,如果策略1~3都解不了,那么直接用策略4。比如有的题目比较难,没有思路。
分析题目中是否有关键输出,比如:Yes、No、0、-1等。这种题,你直接输出就可以了,一般都会得10分,这样就可以避免爆0。
比如2023年的T3:一元二次方程。题面有明确要求如下图:
那么程序中直接 cout << “NO” 就可以得10分。
一般4道题会有一道类似这种的题面。如果没有怎么办?
每道题都有输出样例,选手可以直接把输出样例在程序中输出,这种当然有蒙的成分,因为判题样例不一定是题目样例,但是总比不写好,万一蒙对了呢,就可以得10分。
第3种策略:数学方法。
很多题目其实我们可以用普通的数学思维求解,也就是说先不管程序算法怎么写,就用数学方法求解。
还是2023年的T3:一元二次方程。学过这个数学知识的同学,肯定都会用数学方法解这道题。
那就很简单了,直接根据开方、整除情况写多个if-else ,然后把数学解法用程序表达即可,完全可以忽略题目中复杂的描述,至少可以得40分。
因为x1、x2有整除的、有x1=x2的、无解NO的情况,只要能把不同的情况用程序表达出来,就能得40分。
第2种策略:暴力求解
同学们肯定都做过百钱买百鸡的题目,这就是典型的暴力求解。
所谓暴力求解,就是可以通过循环遍历所有的情况,不管是几重循环,尽可能的覆盖样例答案。
特别是遇到的序列相关的题目,就可以通过循环遍历序列,把所有解的结果求出来,然后再根据题目处理正确答案,一般也是可以得部分分的。如下题描述:
前面分析的一元二次方程题,也用到了暴力求解的思路:通过if-else枚举所有情况,能整除的、不能整除的等等,然后每个都用程序表达数学解法。
所以暴力枚举,数据比较多就用循环暴力;情况比较少可以写多个分支。挨个处理,总能覆盖部分判题样例,得部分分。
第1种策略:算法解题
这种没有特别要说的,每个同学都应该掌握的解题思路:
选手们拿到试卷后,先不要着急答题,而是先把四道题浏览一遍,分析每道题可以用哪种策略,然后再逐个解题。
一般T1、T2相对比较简单,我们用第1种或第2种策略,尽量拿满分。T3考察逻辑题,按策略1~4的顺序解题。T4考察算法,比如图论、动态规划等,常用策略1解题。
解题策略优先级是:先策略1,最后策略4。实在不会解,程序也不要空着,空着肯定0分,可以把题面样例输出,说不定能蒙到判题样例,直接得分。