noip需要准备哪些方面的基础知识。复赛需要做哪些类型的题目(提高组)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了noip需要准备哪些方面的基础知识。复赛需要做哪些类型的题目(提高组)?相关的知识,希望对你有一定的参考价值。

Noip算法(小超)
以下用n表示图的点数,m表示边数,k表示一个常数,log均以2为底数,存储边都采用边表。
【模拟】
高精度加、减、乘,除应该不需要
表达式求值(中缀转后缀,栈的操作)

【图论】
图的表示:邻接矩阵,邻接表,边表
单源最短路:dijkstra(O(n2)),bellman(spfa优化,O(km))
传递闭包和floyd
最小生成树算法:prim(O(n2)),kruskal(O(m log m))
拓扑排序(O(m))
欧拉路(边一次)
汉密尔顿回路(点一次)

强连通分量
匹配算法(最大匹配,最小点覆盖,最小路径覆盖,最大独立集)
网络流算法(最大流dinic,最小费用流spfa)
差分约束系统

【树】
树的先序、中序、后序遍历
树中的最长路(两遍bfs)
特殊的树:二叉树
树形动态规划
并查集
字母树

【搜索】
深搜,一般需要剪枝,有可行性剪枝和最优性剪枝两种经常考。还有迭代深搜。
宽搜,双向广搜,估价函数。

【动态规划】
背包问题:01背包,无限背包,多重背包,有依赖的背包,二维费用背包。(参照背包九讲)
树形动态规划
状态压缩的动态规划
最长不下降子序列
最长公共子序列和最长公共子串
动态规划的优化(快速幂,改变状态,优化转移,单调性,四边形不等式)

【贪心】
也有一些经典的模型,如取线段的问题,一般从小规模数据找规律,再适当的有一些证明。

【排序】
选择排序、冒泡排序
快速排序(快排)、堆排序
插入排序
希尔排序
归并排序

【分治】
二分查找
二分答案(这个好像不是分治)

【串】
串的基本操作
Kmp(字串匹配)
Kmp扩展
AC自动机

【数论】
欧几里得算法,最大公约数和最小公倍数
判断质数(sqrt式与筛法求素数)
进制转换

同余定理
中国剩余定理
概率与期望
欧拉函数

【几何】
线段相交
凸包(水平序和极角序)
半平面交

【有序表】
顺序表、链表、块状链表
线段树及其基本操作
树状数组
平衡树(sbt、treap、splay)
后缀数组

【其他】
Hash
随机化算法
矩形切割(与线段树的比较)
Lca(最近公共祖先)与rmq(区间最值)
高斯消元
参考技术A 二、复赛内容与要求:
在初赛的内容上增加以下内容:
A.数据结构:
1.指针类型
2.多维数组
3.单链表及循环链表
4.二叉树
5.文件操作(从文本文件中读入数据,并输出到文本文件中)
B.程序设计
1.算法的实现能力
2.程序调试基本能力
3.设计测试数据的基本能力
4.程序的时间复杂度和空间复杂度的估计
C.算法处理
1.离散数学知识的应用(如排列组合、简单图论、数理逻辑)
2.分治思想
3.模拟法
4.贪心法
5.简单搜索算法(深度优先 广度优先)搜索中的剪枝
6.动态规划的思想及基本算法
评测环境
NOIP2010比赛环境规范依照使用Linux平台、统一编译器、提供多种集成开发环境选择的原则制定。
NOIP2010的比赛环境中,操作系统平台选择Linux;在固定的操作系统平台下,对应不同的语言,使用统一的编译器,消除编译器不同给选手带来的不利影响;对应每种语言,提供了多种集成开发环境,选手可以根据自己的习惯选择集成开发环境。
在全国评测时,评测环境保持与比赛环境的操作系统及编译器一致。也就是说全国评测时,使用与选手比赛时一致的平台对选手的程序进行评测,以消除平台不一致带来的不利影响。
以下是NOIP2010比赛环境要求的详细描述:
使用Linux操作系统平台:
(1)Linux操作系统必须使用NOI linux,基于ubuntu开发;
(2)Pascal语言,必须使用Free Pascal 2.0.4版本作为编译器;
(3)C语言,必须使用gcc 3.2.2作为编译器;
(4)C++语言,必须使用g++ 3.2.2作为编译器。
参考技术B 要准备noip复赛,做的题越多越好,最起码包括搜索、动态规划、高精度、基本图论、树、堆以及大量的相应练习题。

数据结构前导课 | 2 披荆斩棘——只学C++,可以做哪些竞赛题


戳一戳!和我一起走进信息学的世界

导读

信息学能够有助于孩子未来工作发展,提升孩子的综合能力。


这一期课,我们承上启下,简单复习信息学所有C++的知识体系,讲解一部分初赛和复赛的知识;然后就从顺序表和链表,开始一步一步走进数据结构的世界!


前一节课,我们复习了信息学C++的整体知识结构,这节课让我们一起来看一下掌握了这些知识结构,我们可以做哪些初赛题目。

往期回顾

【NOIP竞赛/CSP认证】

▶  赛前必看!信息学名师带你复习NOIP竞赛初赛及CSP认证初赛


【信息学精华帖】

▶  收藏!交流会内容全公开,让你陪孩子更好地学习信息学

▶  信息学的万般好处!附C++必备基础知识总结

▶  信息学提高班知识体系详解与家长常见问题解答!让孩子赢在提高班学习的起跑线!

▶  再回首,最全提高班知识总结,做更优秀的自己!


【数据结构前导课】

▶  数据结构前导课 | 1 温故知新——一篇文章领略信息学C++知识结构


【C++提高班教程】

▶  C++强化 | 01 新学期再出发!温故知新!

▶  C++强化 | 02 继续前行,三大结构终极介绍

▶  C++强化 | 03 一维数组入门

▶  C++强化 | 04 数组越界

▶  C++强化 | 05 一维数组经典应用

▶  C++强化 | 06 一篇文章带你掌握字符数组

▶  C++强化 | 07 二维数组

▶  C++强化 | 08 二维数组经典案例

▶  C++强化 | 09 一篇文章带你探索函数的奥秘

▶  C++强化 | 10 函数进阶必备

▶  C++强化 | 11 这样学递归,才不会觉得难

▶  C++强化 | 12 格式化输入输出与文件操作

▶  ​​C++强化 | 13 结构体入门

  ​​C++强化 | 14 结构体进阶


【C++基础班教程】

▶  C++总结 | 01 程序的世界

▶  C++总结 | 02 输出、换行与注释

▶  ​C++总结 | 03 变量定义、赋值与运算​

▶  ​C++总结 | 04 算术运算符与赋值运算符​

▶  ​C++总结 | 05 cin语句​

▶  ​C++总结 | 06 程序中的数据类型​

▶  ​C++总结 | 07 数据类型补充​

▶  ​C++总结 | 08 顺序结构​

▶  ​C++总结 | 09 if 和 if-else​

▶  C++总结 | 10 if嵌套与逻辑运算符

▶  C++总结 | 11 开关语句switch-case

▶  C++总结 | 12 for循环及其应用

▶  C++总结 | 13 数据范围与数据类型

▶  C++总结 | 14 break与continue

▶  C++总结 | 15 while与do-while

▶  C++总结 | 16 循环嵌套及其应用 



1 信息学竞赛总览

经过两个学期的学习,所有有关于C++基础的知识都全部讲解完毕,上一节课,我们也整体复习了信息学C++的全部知识体系,相信大家对信息学C++有更加清晰的认识和把握了。


这一部分,让我们先来一起认识一下信息学初赛吧!对于刚刚进入信息学世界的孩子们来说,能够接触到的信息学竞赛主要有两个:NOIP竞赛和CSP认证。让我们一起来简单了解一下NOIP竞赛和CSP认证吧!

1 NOIP竞赛

NOIP竞赛是历史比较久远的竞赛,NOIP竞赛分两个组,一个叫普及组,一个叫提高组。每组竞赛都包括初赛和复赛,不同地区的能够进入复赛的初赛分数线不同。


普及组和提高组的初赛题型大致类似,唯一不同在于最前面的选则题,普及组只有单选题,提高组还有不定项选择题。从题目角度的难度来说,普及组的难度小于提高组。


普及组和提高组的复赛都是给一个问题,然后写代码。普及组有四道,提高组有六道,一般来说,普及组的四道题和提高组的前四道题难度相近,题目的难度也是逐渐递增。

2 CSP认证

CSP认证之前主要是针对于计算机岗位工作人员,现在也面向中小学生,认可度略低于NOIP竞赛!CSP认证包括两个等级:CSP-J(Junior,入门级)和CSP-S(Senior,提高级)两个级别。


CSP的初赛难度低于NOIP竞赛,这是因为,CSP认证初赛中的题目都是选择题,这就说明我们可以使用一些答题技巧,并且选项会给我们提供思路,并带领我们一步一步理解题目。


虽然上面有很多差别,但是CSP认证中的题目涉及到的知识点与NOIP竞赛完全一致!所以大家不用担心,我们都会讲到。

3 说在后面的话

虽然两个比赛重要程度不同,考试题型不同,但是所有的知识点都是一样的,我们平常学习,会涉及到所有的知识点,在考前,会有具体的针对于不同类型考试的不同赛前辅导!所以,我们平时只需要跟着老师好好学即可。


接下来,让我们围绕着难度更高的NOIP竞赛的题型来分析一下,对于当前的我们来说,信息学竞赛初赛题目,我们都能做哪些?



2 选择题

NOIP竞赛第一部分就是选择题,对于普及组来说,只有单项选择题,近几年,选择题有15道,每道题2分。对于提高组来说,既有单项选择题(10道,每道2分),又有不定项选择题(5道,每道2分)。


选择题中,有一部分是程序设计,其余部分为:


计算机基础理论
编码、进制
数据结构
数学、逻辑与算法


这四部分,我们在后面的课程中会逐步给大家讲解。

1 单选题

以下面这道题目为例:


数据结构前导课


这个题目就需要我们认真分析:


循环第一轮,n++,n变为1,n%3≠0,执行下一轮;


循环第二轮,n++,n变为2,n%3≠0,执行下一轮;


循环第三轮,n++,n变为3,n%3=0,k--,k变为3,执行下一轮;


循环第四轮,n=k,退出循环。


最后结果n和k都是3,选择D。


对于单项选择题,我们一般都是认真分析,找到结果即可,程序设计这一部分,单项选择题,主要是围绕分析程序执行结果补充程序两个部分。


这两个主要是培养大家能读懂别人的程序,优化完善别人的程序的能力,在选择题中,这两个部分比较简单。初赛中的最后两大块分别就是阅读程序写结果和补充程序题,那两大块会涉及一些数据结构和算法的知识,难度比较大。

2 不定项选择

以下面这道题目为例:


数据结构前导课


分析一下上面这道题目,对于B和D,循环条件使得循环体内无法执行,需要改为i<=100才可以。所以这道题目选择AC。


对于不定项选择题,我们需要认真审视每一个选项,才能保证做对。不定项选择题主要是给一个功能,判断下列的做法哪几个是正确的

3 问题求解题

问题求解题我们也可以当做填空题,问题求解题只有两道,每道5分,每道题可能有多个空。


问题求解题一般都围绕数据结构、数学、逻辑和算法这几部分。没有出过与程序设计相关的题目,在这我们就不展开说明了。

4 阅读程序题

阅读程序题,就是根据给定的程序分析程序的执行结果!对于NOIP竞赛来说,就需要我们自己一步一步分析了,对于CSP认证来说,它会给多个选择题,一步一步引导我们去思考。只要我们能掌握NOIP竞赛的题目,CSP认证的题目也就不在话下了。




NOIP竞赛中,阅读程序题有4道,每道题8分;一般来说,第一道题都是最简单的,只需要简单分析一下就能出结果,这道题我们以目前的能力都是会做的。第二道题和第四道题,难度有所提升,其中有一道题需要我们按照他的程序认真分析,将输入带入执行一遍程序即可得到答案;另外一道题目,直接求解会非常难,但是我们可以阅读程序,了解程序功能,根据程序功能自己分析输入得到输出。第三道题,一般都是最难的,并且会结合递归,需要我们一步一步,认真分析,得到最终结果。


对于现在的我们来说,我们必须要掌握第一道题,有能力的同学可以去接触并掌握二题和四题,第三题,需要我们不断练习,不断提升。

1 16年普及组第一题

我们首先看一下16年普及组的第一题:


数据结构前导课


我们仔细分析,首先我们输入第一个变量,第一个变量不为零,计数器count+1变为1,sum也加变为第一个值。


在循环中,只要我们的输入不为0,我们就会一直将输入加到sum上去,也会统计输入的个数,然后会分别求每次的最大和最小值。


根据上面的分析,我们知道:


max保存的是第一个0以前的最大值,
min保存的是第一个0以前的最小值,
sum保存的是第一个0以前的所有数的和,
count保存的是第一个0以前的所有数的个数。


我们看输入,我们知道0之前的最大值为6,最小值为1,sum为(1+2+3+4+5+6)= 21,count为6,所以输出为:


6,1,3


21/6=3(注意是整数类型)。


2 18年普及组的第一题

我们接下来看一下18年普及组的第一题:


数据结构前导课


看这个代码我们知道,如果是大写字母字符,就让其变为其后面的字符,其他的不变,所以输出结果为:


RuanHuoMianTai


5 完善程序题

最后一部分就是完善程序题,这一部分题目,需要我们能理解出题者的意图,按照出题者的意图完善程序。完善程序题会说明题目的功能。


完善程序题有两道,一般每道题14分,也有可能两道题分值不同,总分28分是固定的。


一般来说,完善程序题都会涉及到具体的数据结构或者数学算法,需要我们学习了后面的知识才能更好地做相关题目。在这里,我们举个例子让大家了解完善程序题。

1 字符数字删除

我们看一下下面这道题目:


字符数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。(每空3分,共12分)


数据结构前导课


对于第一个空来说,如果这个字符不是数字字符,就会保存下来,判断条件就应该是字符<0或者字符>9,也就是说第一个空应该填  ||


当我们执行完上面的操作,就说明我们又多了一个非数字字符,j表示的是当前的非数字字符,所以就该让j+1,第二个空可以是如下三种:j++++jj+=1


对于第三个空,注意两点,第一个点函数返回值类型是int,所以肯定不是让我们返回删除整数字符后的字符串,应该是返回一个整数。再看主函数中,函数的返回值传给了变量len,len是删除整数字符后的字符串长度,所以函数返回值应该是j,也就是说第三个空为 j

第四个空就很简单了,就需要我们把每个字符输出即可,注意输出时的索引为i,也就是第四个空为 s[i]


总结一下,答案如下:


(1)||
(2)j++ 或 j=j+1 或 ++j
(3)j
(4)s[i]



6 作业

本节课的作业,就是复习上面的习题,并完成下面的题目!

1 阅读程序题

分析下面这道题目的执行结果:


数据结构前导课


要求能分析出程序的功能,并求程序的输出结果。



AI与区块链技术

数据结构前导课

长按二维码关注

以上是关于noip需要准备哪些方面的基础知识。复赛需要做哪些类型的题目(提高组)?的主要内容,如果未能解决你的问题,请参考以下文章

参加noip需要哪些知识

noip关于复赛要求的问题

面试前都有哪些需要准备的东西?

noip复赛会考哪些类型的题目?该如何复习?

你问我答,准备面试需要做哪些技术储备,面试官更加关心什么方面的技术点?

参加全国青少年信息学奥林匹克竞赛需要具备哪些方面的知识?