NOIP初赛知识总结

本文总结了NOIP初赛的相关知识,包括NOIP竞赛的历史、语言基础(如C++和Pascal)、硬件技术(冯·诺依曼理论、微型机技术指标)、编码原理、软件与操作系统、数据结构(线性结构、二叉树)以及常见的排序算法。还提到了自2022年起NOIP赛事全面取消Pascal语言支持,仅支持C++。
摘要由CSDN通过智能技术生成

进制,图论,组合数学部分略,就写了一下自己不熟悉的部分


基本常识

NOIP相关

  1. 1985年起,CCF每年固定举办全国青少年信息学奥林匹克竞赛(NOI)(1984年也曾举办过)。1995年起,举办NOIP,每年由中国计算机学会统一组织。

  2. NOIP2018是第二十四届全国青少年信息学奥林匹克联赛。

  3. 目前参赛者可以选择使用C、C++、Pascal三种编程语言,初赛不同语言考题不同,复赛试题相同。具体的内容则在竞赛大纲中体现。

  4. 2016年11月1日,中国计算机学会发布通知:2020年开始,除NOIP以外的NOI系列其他赛事(包括冬令营、CTSC、APIO、NOI)将不再支持Pascal和C语言;从2022年开始,NOIP竞赛也将不再支持Pascal语言。即从NOIP2022开始,NOI系列的所有赛事将全部取消Pascal语言。在无新增程序设计语言的情况下,NOIP系列赛事自2022开始将仅支持C++语言。

  5. 复赛上机编程可以使用的编辑器是 MinGW Develop Studio、Free Pascal IDE以及北航GAIT研究组开发的GUIDE(GAIT Universal IDE)等。自NOI Linux发行之后NOI、NOIP被要求使用NOI Linux,但许多省因为技术原因仍在使用Windows系统,其中C/C++仍在使用Dev-C++作为IDE。

  6. 初赛是十月的第2个或第3个星期六下午14:30-16:30
    复赛是十一月的第2个星期六下午14:30-18:00(普及组)
    十一月的第2个星期六上午8:30-12:00,星期日上午8:30-12:00(共2天,提高组)

语言基础

  1. C++,object Pascal,VB,smalltalk(第一个支持动态类型的语言),simula67(第一个面向对象的语言),Java是面向对象的

  2. free Pascal,C是面向过程的

  3. 编译器将高级语言程序转变为目标代码

  4. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机

  5. 第一个高级语言是fortran,Ada是美国军方发明的语言

  6. 第一个支持面向对象的语言是simula67


硬件技术

一、冯·诺依曼理论

1944年,美籍匈牙利数学家冯·诺依曼(设计出第一台具有存储程序功能的计算机EDVAC)提出计算机基本结构和工作方式的设想。理论要点如下:

  1. 计算机硬件设备由存储器、运算器、控制器、输入设备和输出设备5部分组成
  2. 存储程序思想——把计算过程描述为由许多命令按一定顺序组成的程序,然后把程序和数据一起输入计算机,计算机对已存入的程序和数据处理后,输出结果。

二、微型机的主要技术指标(位)

  1. 字长:指计算机能够直接处理的二进制数据的位数。单位为位(bit)。

  2. 主频:指计算机主时钟在一秒钟内发出的脉冲数,在很大程度上决定了计算机的运算速度。

  3. 内存容量:是标志计算机处理信息能力强弱的一向技术指标。单位为字节(byte)。
    8bit=1B 1024B=1KB 1024KB=1MB 1024MB=1TB
    2^10B=1KB
    2^20B=1MB
    2^30B=1GB

  4. 外存容量:一般指软盘、硬盘、光盘、优盘、SD卡等。

  5. 地址总线宽度与内存大小:计算机的CPU和内存在若干根地址线(每根地址线,代表一个bit位),,n位宽度的地址总线可寻址范围是 2 n 2^n 2n个地址。
    例如:
    某计算机的CPU和内存之间的地址总线宽度是32位(bit),这台计算机最多可以使用4GB的内存。(noip2016提高组初赛T9)

  6. 每个像素的位数:有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。

三、中央处理器

CPU(Central Processing Unit)由运算器、控制器和一些寄存器组成。
运算器:进行各种算术运算和逻辑运算。
控制器:计算机的指挥系统。
CPU的主要性能指标是主频和字长。

CPU的主要任务是执行数据运算和程序控制(寄存器组合内部总线),解释计算机指令以及处理计算机软件中的数据。


编码

一、带符号数的机器码表示方法

  1. 带符号二进制数最高位的一位数用来表示符号:0表示正,1表示负。

  2. 原码、反码和补码:
    原码:对数取绝对值后,在最高位(左端)补上符号位(0/1)。
    反码:正数的反码与原码相同,负数的反码是其原码符号位不变,其余各位按位取反。
    补码:
    一个数x的补码记作 [ x ] 补 [x]_{补} [x],设模是M,x是真值,则补码的定义如下:
    x ≤ 0 x\leq 0 x0 [ x ] 补 = [ x ] 原 [x]_{补}=[x]_{原} [x]=[x],否则 [ x ] 补 = M + x [x]_{补}=M+x [x]=M+x
    对于负数的补码有另一种更简便的求法:原码符号位保持“1”,其余各位按位取反,末位再加1。
    c++中的机器码一般用补码表示。(便于运算,所以lowbit(x)=x&(-x))

二、定点数和浮点数

  1. 定点数(Fixed-Point Number)
    计算机处理的数据不仅有符号,而且大量的数据带有小数,小数点不占有二进制一位而是隐含在机器数里某个固定位置上。
    通常采取两种简单的约定:
    (1)定点纯整机器数(定点整数):约定所有机器数的小数的小数点位置隐含在机器数的最低位之后。
    (2)定点纯小数机器数(定点小数):约定所有机器数的小数点隐含在符号位之后、有效部分最高位之前。
    定点整数/小数都可以有原码、反码和补码三种形式。

  2. 浮点数(Floating-Point Number)
    计算机多数情况下采作浮点数表示数值,与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值