Hello你们好,我是洛谷的HansBug。首先自我介绍下,我如今在北京航空航天大学,计算机科学与技术专业读大二,我参加过2013-2015年的提升组NOIP和NOI2015。算法
总体情况
- 初赛举办于大概每一年的十月中旬,大概在一个月后(光棍节先后)会进行NOIP复赛。
- 近些年初赛的门槛也愈来愈高,在江浙地区,有些市有些年份甚至普及组分数线能够高达95,而其余时候也至少得90才基本能保证进入复赛。
能够说在中强省,初赛的要求愈来愈严格。那么NOIP初赛有哪些基本的前置要求呢?数据结构
初赛基本要求
- 熟练运用比赛用语言(Pascal、C、C++,2020年开始NOI再也不支持Pascal和C,2022年开始NOIP将再也不支持Pascal和C),掌握最基本的语法知识
- 了解基本的计算机基础知识,而且能进行简单的运算
- 了解基本的算法和数据结构知识,而且能进行必定程度的运用(能够说是整个NOI系列竞赛的核心内容,时间关系不在本节详细讲述)
- 了解一些数学知识,并能进行简单的运算
下面咱们来看看初赛大体是怎样的题型分布。学习
题型
NOIP初赛主要题型分为四种:人工智能
- 选择题
- 共占30分
- 20题,每题1.5分
- 普及组所有为单选题,提升组为15个单选题和5个多选题(多选题彻底正确对才给分)
- 问题求解
- 共占10分
- 两道题,近年来通常为填空题形式,每题5分
- 读程序
- 共占32分
- 4题,每题8分
- 前三题通常为单个填空,最后一道题有时会分红几个点做答
- 完善程序
- 共占28分
- 分两道完善程序题,将完整的程序挖掉一些空进行填空
- 每空2-3分,因评分标准而异
由此看来,选择题、读程序和完善程序都占了大约三分之一不到一点的比例,哪一块都是不能忽视的。递归
选择题
主要考点:图片
- 百科题、时事热点题(2017提升组单选第1题,多选第四、5题)
- 计算机基础知识计算题(2017提升组第二、三、4题)
- (重点)算法、数据结构、数学题(2017提升组第五、六、七、八、九、十、十一、十二、1三、1四、15,多选一、二、3题)(时间关系不在本节详细讲述)
那么接下来,我来科普一些NOIP初赛选择题常考的计算机基础知识。get
计算机基础知识
计算机发展史
- 第一代计算机:电子管计算机(表明:ENIAC,约占地170平方米,运算速度每秒约5000次)
- 第二代计算机:晶体管计算机(体积依然挺大的,和现代的计算机样子大不同,仍在使用纸带编写程序,运算速度每秒几十万次)
- 第三代计算机:中小规模集成电路计算机(已经有了一些现代电脑的模样,每片集成不超过1000个逻辑门,每秒几百万次到几千万次)
- 第四代计算机:大、超大规模集成电路计算机(目前的计算机,2.0GHz,十亿次运算每秒)
- 将来计算机:人工智能计算机?生物计算机?量子计算机?
说到这,不得不提一下计算机内部的存储结构。数学
计算机存储单位及换算关系
- 现代计算机均为2进制计算机(惟一的非2进制计算机——ENIAC,采用十进制)
- 最小单位为2进制位(Bit),基本单位为字节(Byte)
- 换算关系(那么接下来就是换算关系)
- 1 Byte = 8 Bit
- 1 KB = 1024 Byte (1 Kb = 1024 Bit)
- 1 MB = 1024 KB
- 1 GB = 1024 MB
- 1 TB = 1024 GB
- 1 PB = 1024 TB
- …………
- 1 Word = 16 / 32 / 64 / 128 Bit (视计算机字长而定,这个数字也被称为字长,目前主流为32和64,部分GPU中可能存在128或者更高位数的状况)
还有一类初赛百考不厌的题型就是进制转换it
进制转换
- 十进制转化为其余进制
- 其余进制转化为十进制
- 2^X进制与二进制之间的快速转换(经过将每一位拆开,分别转化为二进制再拼接便可,转回来则为逆过程)
快速转换的意义:对于有些比较多个不一样进制下的数的大小的题目,咱们能够将八、16进制的数快速转化为2进制,10进制的数转化为2进制,再在二进制下比较,这样能够大大节省计算时间。基础
还有一类频繁出如今卷子上的知识点就是数的表示法——原码、反码、补码。
原码、反码、补码
(均以8位二进制为例)
- 原码
- 首位为符号位,0表示正,1表示负
- 后面的若干位为数值位,表示数字的绝对值大小
- 特色
- 0有两种表示法:1000000, 0000000
- 8位二进制原码只能表示255个不一样的数
- -128没法表示
- 反码
- 首位为符号位,0表示正,1表示负
- 后面的若干位为数值位
- 当数字为_正数_时,和原码同样
- 数字为负数时,为绝对值的二进制取反
- 例如
- 127 -> 01111111
- 23 -> 00010111
- -127 -> 10000000
- -23 -> 11101000
- 0 -> 00000000
- -0 -> 11111111
- 特色
- 0有两种表示法
- 8位二进制反码只能表示255个不一样的数
- -128没法表示
- 补码
- 首位为符号位,0表示正,1表示负
- 后面的若干位为数值为
- 当数字为_正数_时,和原码同样
- 数字为负数时,在反码的基础上+1
- 10000000表示-128
- 例如
- 127 -> 01111111
- 23 -> 00010111
- -127 -> 10000001
- -23 -> 11101001
- 0 -> 00000000
- -128 -> 10000000
- 特色
- 0只有一种表示法
- 8位二进制补码能表示256个不一样的数
- 能够表示-128
- 对于负数运算,能够直接进行二进制加法运算,完美解决了负数运算的问题,故计算机中有符号整数类型通常都采用这一表示法
还有一类特别喜欢考的就是位图(Bitmap)。
位图
除此以外还考过不少其余的相关点。
因此给你们的建议是:
- 关注前沿计算机技术方面的新闻
- 关注CCF和NOI系列竞赛政策类新闻
- 多作题,熟悉各种基本知识
- 考试时要敢猜
问题求解
首先咱们来看下问题求解都有哪些考察点:
问题求解类题目的特色:
- 方法不少样,不太容易总结通常性的套路
- 观察近年来的题目能够发现,答案数字大都不是很大。大部分题目,只要足够细心和耐心,都是能够暴力解决的
- 对于有些题目,不妨采用相似写程序时采用的算法来解决
好比这样一道例题:
因此说不少时候不要被限制住了思惟。换个角度想问题,或者说用本身最熟悉的方式想问题才是上策。
复习方法:
- 多作题,熟悉通常排列组合题目的套组
- 算法和数据结构知识要作到活学活用
- 锻炼细心和耐心
读程序
分析:
- 读程序题一道题8分
- 意味着在江浙等初赛要求较严格的地区,只要错一道读程序题就凶多吉少了
- 读程序要力求零失误
战术:
- 对于相对简单相对短的程序,要认真计算,不能出现失误
- 对于相对长、循环次数不少、递归结构较复杂(总之逐步手算很困难)的程序,要尝试寻找规律
- 策略一:观察程序的结构,弄清楚程序每一步都在干什么,推测 出程序最终要实现的功能
- 策略二:当不太容易一会儿看出功能时,也能够考虑先按照程序手算上几个来回,而且仔细观察各项数据的变化规律,每每这个时候也容易发现一些规律。
- 注意
- 不要想固然!不要想固然!不要想固然! 必定要注意带有必定功能的程序在一些细节上是否有变化。(不少时候一个小细节的变化,甚至可能致使整个程序功能发生重大变化)
- 仔细观察输入输出的格式!
- 输出到一行 or 输出到多行?
- 是否存在修约?保留几位小数?
- 是否存在场宽等特殊排版格式?
- …………
复习方法:
完善程序
分析:
- 不一样于本身编写程序,在完善程序题目中,咱们须要去尝试理解别人的程序和别人的脑回路。
- 同时,按照近年来的套路,也经常是对一些基本算法思想的考察(算法基本功很重要!很重要!很重要!)。
- 此外,近年来,完善程序通常都会告诉选手所采用的算法,这必定程度上算是下降了难度。
在你有了基本的算法基础以后,咱们能够采起以下战术:
- 对于没有任何算法提示的题目,能够先想想若是本身写的话,会采起什么样的算法,使用什么样的数据结构。
- 对于有算法提示的题目,能够先想想若是本身采用这一算法去写这个题目的话,程序大概会是个怎样的结构。
须要注意的点:
- 在句末,要注意看原程序是否有分号。若是必要时甚至能够所有写上分号(实际程序中,多个分号也是能够运行的;可是少了分号将致使程序没法运行)
- 必定要注意程序中是否有一些细节上的改动(部分关键位置上的细节变化可能致使整个填空方式大不同)
整体:
- 巩固数据结构、算法、数学基本功(能够说是整个NOI系列赛事中的重中之重)
- 充分了解计算机科学相关常识(在选择题中所占的比例仍是有一些的,同时对于之后有兴趣在大学中继续学习计算机相关专业的同窗,这些都是挺重要的专业常识)
- 多作题!多作题!多作题!(锻炼题感,熟悉通常的套路和解题技巧,作到临危不乱)
好的以上就是这些,谢谢你们。
你们有什么疑问的话能够如今提出来。