NOI大纲
一、简介
1.2原则
1.2.1等级化原则
按照目前 NOI 系列活动开展的现状,以及将来可能的发展,大纲将各知识点分成入门级、提高级和 NOI 级。高级别自动包含低级别知识点。各级别与 NOI 以及 CCF 主办的其他有关活动的对应关系如下:
-
入门级:CCF非专业级软件能力认证入门组 (CertifiedSofwareProfessional Juior,简称CSPJ);
-
提高级:全国青少年信息学奥林匹克联 赛(National Olympiad in Informaticsin Provinces,NOIP)、CCF非专业级软件能力认证提高组(Certified SoftwareProfessionalSenior,简称CSP-S);
-
NOI 级:全国青少年信息学奥林匹克竞赛(NOI)及以上,包括国际信息学奥林匹克(Intemational OlympiadinIfomatics, IOI)中国队选拔(CTS)、NOI冬令营、国家集训队集训等。
除上述等级以外,还对所有知识点标定了学习难度系数(范围为1~10)。考虑到相邻级别中知识点的难度系数范围可能互有交叉,入门级知识点难度系数范围取1-5,(除入门级知识点外的)提高级知识点难度系数范围取5-8,(除入门级、提高级知识点外的)NOI级知识点难度系数范围取7~10。
各知识点难度系数以【X】的格式列在知识点之前。
1.2.2差异化原则
为促进信息学和 NOI 活动的普及,大纲应较详尽地规定中低等级知识点的范围,以尽可能清晰地划定相应等级的知识范围,有效地指导入门学生的学习及相关的教学活动;为保证和促进我国选手在 IOI 竞赛中的竞争力,大纲应避免过于严格地限制命题的思路,须为NOI等高水平竞赛的题目命制留有充分的开放性,因此不宜过于细致地规定高等级知识点的范围
为此,大纲在制定中将采取“上粗下细的指导思想知识等级越低,其内容规定得越细:知识等级越高,其内容规定得越粗。
1.2.3统一性原则
为保证大纲的简明性和系统性,高等级比赛的知识范围将自动地包含低等级比赛的所有知识点。同时,对每个等级按照竞赛环境(Linux 和 Windows)、程序设计语言(C++)、数据结构、算法、以及数学等进行了分类。对每个大类又按照知识点的属性继续划分为若干小类某些知识点可能与多个类别均有紧密或松散联系,本大纲均按其主要属性划定其类别,以避免同一知识点在多个类别中的重复出现。
1.3建议
建议在各级别竞赛题目的命制中,
-
各级别竞赛或活动的考察范围不超过对应的大纲级别,其中难度系数为10的知识点仅用于CTS;
-
尽量避免对算法复杂度的常系数的考察;
-
部分单个知识点可能对应不同层次、不同性能的多个数据结构或算法。考察内容应以常见的、经典的内容为主,避免虽具有微弱性能优势(例如算法复杂度的细微改进)但较为冷解或过新的数据结构和算法。
1.4修订
-
大纲将根据NOI的发展而定期进行维护和修订,周期暂定为两年;
-
本轮大纲维护小组成员为:朱全民、江涛、宋新波、汪星明、胡伟栋和赵启阳。欢迎将对大纲的修订意见反馈给以上人员。
二、大纲
2.1入门级
2.1.1计算机基础与编程环境
1.【1】计算机的基本构成(CPU、内存、IO设备等)
2.【1】Windows、Liux等操作系统的基本概念及其常见操作
3.【1】计算机网络和Iternet的基本概念
4.【1】计算机的历史及其在现代社会中的常见应用
5.【1】NOI以及相关活动的历史
6.【1】进制的基本概念与进制转换、字节与字
7.【1】程序设计语言以及程序编译和运行的基本概念
8.【1】使用图形界面新建、复制、删除、移动文件或目录
9.【1】使用Windows系统下的集成开发环境(例如DevC++等)
10.【1】使用Linux系统下的集成开发环境(例如Code:Blocks等)
11.【1】g++、gcc等常见编译器的基本使用
2.1.2 C++程序设计
1.程序基本概念
- 【1】标识符、关键字、常量、变量、字符串、表达式的概念
- 【1】常量与变量的命名、定义及作用
- 【2】头文件与名字空间的定义与理解
- 【2】编辑、编译、解释、调试等概念理解
2.基本数据类型
- 【1】整数型:int,longlong
- 【1】实数型:float,double
- 【1】字符型:char
- 【1】布尔型:bool
3.程序基本语句
- 【2】cin语句,scanf语句,cout语句,printf语句,赋值语句,复合语句
- 【2】if语句,switch语句,多层条件语句
- 【2】for语句,while语句,do while语句
- 【3】多层循环语句
4.基本运算
- 【1】算术运算:加、减、乘、除、整除、求余
- 【1】关系运算:大于,大于等于,小于,小于等于,等于,不等于
- 【1】逻辑运算:与(&&)、或(||)、非(!)
- 【1】变量自增与自减运算
- 【1】三目运算
- 【2】位运算:与(&)、或(|)、非(~)、异或(^)、左移、右移
5.数学库常用函数
- 【3】绝对值函数,四舍五入函数,取上整函数,取下整函数,常用三角函数,对数函数,指数函数,平方根函数
6.结构化程序设计
- 【1】顺序结构、分支结构和循环结构
- 【2】自顶向下、逐步求精的模块化程序设计
- 【2】流程图的概念及流程图描述
7.数组
- 【1】数组定义,数组与数组下标的含义
- 【1】数组的读入与输出
- 【2】纯一维数组的综合运用
- 【3】纯二维数组与多维数组的综合应用
8.字符串的处理
- 【2】字符数组与字符串的关系
- 【2】字符数组的综合应用
- 【2】strimg类定义、相关函数引用
- 【3】string类的综合应用
9.函数与递归
- 【2】函数定义与调用,形参与实参
- 【3】传值参数与传引用参数
- 【2】常量与变量的作用范围
- 【2】递归函数的概念、定义与调用
10.结构体类型
- 【3】结构体的定义及应用
11.指针类型
- 【4】指针的概念及调用
- 【4】指针与数组
- 【4】字符指针与string类
- 【4】指向结构体的指针
12.文件及基本读写
- 【2】文件的基本概念,文本文件的基本操作
- 【2】文本文件类型与二进制文件类型
- 【2】文件重定向、文件读写等操作
13.STL模板应用
-
【3】<algorithm>中 sort 函数
-
【4】栈(stack)、队列(queue)、链表(list)、向量(vector)等容器
2.1.3数据结构
1.线性表
- 【3】链表:单链表、双向链表、循环链表
- 【3】栈
- 【3】队列
2.简单树
- 【3】树的定义及其相关概念
- 【4】树的父亲表示法
- 【3】二叉树的定义及其基本性质
- 【4】二叉树的孩子表示法
- 【4】二叉树的遍历:前序、中序、后序遍历
3.特殊树
- 【4】完全二叉树的定义与基本性质
- 【4】完全二叉树的数组表示法
- 【4】哈夫曼树的定义、构造及其遍历
- 【4】二叉排序树的定义、构造及其遍历
4.简单图
- 【3】图的定义及其相关概念
- 【4】图的邻接矩阵存储
- 【4】图的邻接表存储
2.1.4算法
1.算法概念与描述
- 【1】算法概念
- 【2】算法描述:自然语言描述、流程图描述、伪代码描述
2.入门算法
- 【1】枚举法
- 【1】模拟法
3.基础算法
- 【3】贪心法
- 【3】递推法
- 【4】递归法
- 【4】二分法
- 【4】倍增法
4.数值处理算法
- 【4】高精度的加法
- 【4】高精度的减法
- 【4】高精度的乘法
- 【4】求高精度整数除以单精度整数的商和余数
5.排序算法
- 【3】排序的基本概念(稳定性等)
- 【3】冒泡排序
- 【3】简单选择排序
- 【3】简单插入排序
6.图论算法
- 【4】图的深度优先遍历算法
- 【4】图的宽度优先遍历算法
- 【5】洪水填充算法(foodfiil)
7.动态规划
- 【4】动态规划的基本思路
- 【4】简单一维动态规划
- 【5】简单背包类型动态规划
- 【5】简单区间类型动态规划
2.1.5数学
1.数及其运算
- 【1】数的概念,算术运算(加、减、乘、除、求余)
- 【1】数的进制:二进制、八进制、十六进制和十进制及其转换
- 【2】编码:ASCII码,哈夫曼编码,格雷码
2.初中数学
- 【1】初中代数
- 【1】初中平面几何
3.初等数论
- 【3】整除、因数、倍数、指数、质数、合数、同余等概念
- 【3】唯一分解定理
- 【3】欧几里德算法(转相除法)
- 【4】埃氏筛法和线性筛法求素数
4.组合数学
- 【2】加法原理
- 【2】乘法原理
- 【4】排列及计算公式
- 【4】组合及计算公式
- 【4】杨辉三角公式