一、准备软件:Dev C++下载与安装
首先掌握 Dev_C++ 的使用,学习C++课程6个月后,再学会CodeBlocks工具的使用,能够编写C++程序的工具非常多,竞赛中掌握这两种工具的使用差不多就够了。
二、训练打字能力:有一定的盲打能力,不能则进行训练。让打字速度跟得上自己的思考速度。点此可进入代码模板打字练习。
三、知识板块(参考《信息学奥赛考试大纲》)
❶、计算机常识: 包括的范围很广,涉及计算机科学的各个领域,主要在CSP-J/S第一轮考察。 历史与人物1 硬件系统 软件系统1 编程语言1 流程图2 计算机网络2 IP地址与域名2 进制转换3 计算机编码3 原码、反码、补码3 格雷码5 逻辑问题5 特殊数列5
❷、C++语法: C++是在C语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。不同于C语言,C++是一种面向对象的语言,在C语言的基础上,C++扩充了一些自己特有的知识,如重载函数、模板、STL等。 C++入门1 分支结构1 循环结构1 常用数学函数2 数组3 字符数组char []与字符串string3 位运算3 指针4 函数4 结构体4 二维数组4 文件操作4 异常处理4 bitset4 面向对象与类5
❸、数据结构: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高效的存储效率。 链表5 数组模拟栈5 链式栈5 数组模拟队列,循环队列5 链式队列5 STL模板5 树的概念6 二叉树的概念、存储和遍历6 树的DFS序6 前缀、中缀、后缀表达式6 哈夫曼树6 邻接表7 堆和优先队列7
❹、基础算法: 模拟2 枚举2 时空复杂度3 递推4 排序4 前缀和4 差分4 高精度计算5 贪心5 递归5 尺取法(双指针)5 二分法5 三分法6 分治法5 倍增法和ST算法8
❺、搜索算法: 搜索(DFS、BFS、洪水填充算法)6 深搜的剪枝技巧7 广搜的优化技巧(双向BFS、双端队列BFS)7 记忆化搜索7 迭代加深搜索(IDDFS)9 A*算法9 IDA*算法9
❻、高级数据结构: 单调栈和单调队列7 哈希表7 离散化7 并查集7 树状数组8 线段树8 二叉查找树6 倍增求LCA8 树上差分8 平衡树Treap9 树链剖分9
❼、动态规划: 动态规划(Dynamic Programming) 是求解多阶段决策问题最优化的一种算法思想。DP问题灵活多变,是算法学习中一种著名的“听着都懂题不会做” 的算法,其原因大致一是对其本质和根源不够了解,二是针对性的训练有所欠缺(建议至少要认真训练至少300道DP题)。 动态规划基本概念6 线性DP6 背包问题6 区间DP6 树形DP7 数位DP9 状态压缩类DP9 单调队列优化DP9 斜率优化DP9
❽、图论: 图的概念7 图的存储7 图的遍历7 欧拉路7 有向无环图 (DAG) 拓扑排序7 最短路算法8 最小生成树(Kruskal、Prim)8 差分约束9 强连通分量(Tarjan)9 割点和桥9 二分图9 分层图8
❾、字符串算法: 字符串哈希7 Trie字典树8 KMP算法8 manacher算法8 AC自动机9
❿、数论: 专门研究整数的纯数学的分支,而整数的基本元素是素数(也称质数),所以数论的本质是对素数性质的研究。数论被高斯誉为“数学中的皇冠”。 GCD、LCM5 质数筛法5 唯一分解定理5 倍增法和快速幂5 欧拉函数9 同余及同余的性质9 扩展欧几里得算法9 乘法逆元9 中国剩余定理9
⓫、线性代数: 高斯消元9 矩阵乘法9
⓬、组合数学: 容斥原理5 抽屉原理5 排列组合8 概率与数学期望9 博弈论9
四、知识按照难度分级
Level 1:
计算机历史 ⊙视频⊙
变量的定义与使用 基本数据类型(整型、浮点型、字符型、布尔型) ⊙视频⊙
控制语句结构(顺序、选择、循环)
基本运算(算术运算、关系运算、逻辑运算)
输入输出语句
目标:掌握顺序、循环、分支的简单程序结构,可以使用集成开发环境进行编程与调试,通过编程基础知识的学习,完成单一功能的程序设计。
Level 2:
计算机硬件与软件 ⊙视频⊙ 计算机网络与安全
程序设计语言的特点 计算机软件系统
流程图的概念与描述
ASCII编码
数据类型的转换
多层分支/循环结构
常用数学函数(绝对值函数、平方根函数、max 函数、min 函数)
目标:掌握程序基本设计,能够使用简单数学函数。可以独立完成包含分支语句、循环语句等比较综合的案例,可以使用分支循环嵌套结构。
Level 3:
进制转换(二进制、八进制、十进制、十六进制) ⊙视频⊙
数据编码(原码、反码、补码) ⊙视频⊙
位运算(&、|、~、^、<<、>>) ⊙视频⊙
算法的概念与描述(自然语言描述、流程图描述、伪代码描述)
一维数组基本应用 字符数组
枚举法
模拟法
目标:掌握数据编码、进制转换、位运算等知识,掌握一维数组、字符串及函数的使用,能够独立使用模拟法、枚举法解决对应的算法问题。
Level 4:
函数的定义与调用 形参与实参、作用域、函数参数传递的概念(值传递、引用传递、指针传递)
指针类型的概念及基本应用 ⊙视频⊙
结构体
二维数组与多维数组基本应用 动态数组vector ⊙vector视频⊙ ⊙pair视频⊙ ⊙map视频⊙
递推 一维前缀和 一维差分
排序概念和稳定性 排序算法(冒泡排序、插入排序、选择排序)
简单算法复杂度的估算(含多项式、指数复杂度)
文件重定向与文件读写操作
异常处理
目标:掌握函数的定义、调用及函数参数传递的方法;掌握二维数组与多维数组的使用技巧;掌握常用排序算法、文件读写和异常处理的使用。能够解决递推相关问题。
Level 5:
初等数论
数组模拟高精度加法、减法、乘法、除法 二维前缀和 二维差分
单链表、双链表、循环链表
辗转相除法(也称欧几里得算法)
素数表的埃氏筛法和线性筛法
唯一分解定理
二分查找/二分答案(也称二分枚举法) 双指针
贪心算法
分治算法(归并排序和快速排序)
递归
算法复杂度的估算(含多项式、指数、对数复杂度)
目标:掌握初等数论,线性表的知识,二分法、分治法、贪心法的思想,完成指定功能的程序。C++掌握数组模拟高精度计算。
Level 6:
树的定义,构造与遍历 二叉树 ⊙视频⊙
哈夫曼树 堆和优先队列
完全二叉树
二叉排序树
哈弗曼编码
格雷编码
深度优先搜索算法 宽度优先搜索算法(也称广度优先搜索算法)
二叉树的搜索算法
简单动态规划(一维动态规划、简单背包问题)
面向对象的思想
类的创建
栈、队列、循环队列
目标:掌握树的基础知识,能够分辨不同的树,并根据不同的搜索算法进行遍历,掌握简单线性动态规划和简单背包问题。
Level 7:
数学库常用函数(三角、对数、指数)
复杂动态规划(二维动态规划、动态规划最值优化)
图的定义及遍历 图论基本算法(图的深度优先遍历、广度优先遍历、泛洪算法) ⊙视频⊙ 欧拉路 并查集
表达式计算 前缀中缀后缀表达式 ⊙视频⊙
单调栈和单调队列
目标:掌握图的定义与遍历相关算法,掌握图论基本概念及基础算法,能使用二维动态规划、动态规划最值优化的知识完成复杂的动态规划算法。
Level 8:
计数原理 排列与组合 ⊙视频⊙ 容斥原理 ⊙视频⊙
杨辉三角
倍增法 快速幂
代数与平面几何(初中数学部分)
图论算法及综合应用(最小生成树、单源最短路) 拓扑排序
较复杂算法的空间复杂度和时间复杂度 算法优化
字符串哈希 哈希表 离散化 Trie字典树
倍增RMQ 倍增LCA
目标:掌握组合数学中基本知识,通过算法的时间和空间效率分析,可以完成相对应的算法优化。
Level 9:达到Level 8 八十分以上水平,正式上路成为专业级选手,可征战CSP-S(提高级,以高中生为主)和NOIP级别的比赛
树状数组 线段树
深搜剪枝 广搜优化
树上差分 平衡树Treap 树链剖分
SPFA算法的优化 差分约束系统 强连通分量 割点和桥 二分图 网络流
KMP算法 AC自动机
数位DP 状态压缩DP 单调优化DP 斜率优化DP
同余问题 矩阵乘法 博弈论 概率期望
