NOIp初赛题目整理

这个 blog 用来整理扶苏准备第一轮 csp 时所做的与 csp 没 有 关 系 的历年 noip-J/S 初赛题目,记录了一些我从不知道的细碎知识点,还有一些憨憨题目,不定期更新。

1、(07senior,5) 在C 语言中,表达式 \(23~\mid~2~\land^~5\) 的值是( )

​ A. \(23\) B.\(1\) C.\(18\) D.\(32\) E.\(24\)

Answer:A

Solution:这题一看就是要考运算符优先级来着。在 \(C\) 语言中,按位与大于按位异或大于按位或,这里的大于指优先级大于,优先级越大越优先计算,因此计算过程为 \(2~\land~5~=~7\)。然后计算 \(23~\mid~7 = 23\)。

需要指出的是,左右移的优先级大于上述三个运算,因此 \(C\) 语言表达式 1 | p << 1 是先算 p << 1,再对 \(1\) 取或,例如 \(1~\mid~1~<<~3\) 的答案是 \(9\)。

2、(07senior,12) 与十进制数 \(17.5625\) 对应的 \(8\) 进制数是( )。

​ A.\(21.5625\) B.\(21.44\) C.\(21.73\) \(D.21.731\)

Answer:B

Solution:这里介绍一下分数的进制转换。先考虑 \(10\) 进制转换成 \(k\) 进制。

首先整数部分按照整数的进制转化进行,即不断除以进制数再取余数。

然后将原数不断的去掉整数部分后乘 \(k\),第 \(i\) 次乘 \(k\) 后整数部分的值即为答案第 \(10^{-i}\) 位的值,一直做直到达到精度位数要求。

例如:\(17.5625\),整数部分被转换为 \(21\),去掉整数部分为 \(0.5625\),乘 \(8\) 得到 \(4.5\),因此十分位为 \(4\),\(4.5\) 去掉整数部分为 \(0.5\),乘 \(8\) 得到 \(4.0\),因此百分位为 \(4\)。\(4.0\) 去掉整数部分后为 \(0\),因此后面的位数都是 \(0\)。

对于 \(k\) 进制转 \(10\) 进制的情况,则整数部分依旧按照整数转换法则转换,对于小数部分,将 \(k^i\) 分位的数乘上 \(\frac{1}{k^i}\),相加即可得到 \(10\) 进制小数部分的值。

3、(07senior,14,不定项选择) 已知 \(7\) 个结点的二叉树的先根遍历是 1 2 4 5 6 3 7(数字为结点的编号,以下同),后根遍历是 4 6 5 2 7 3 1,则该二叉树的可能的中根遍历是( )

A. 4 2 6 5 1 7 3 B. 4 2 5 6 1 3 7 C. 4 2 3 1 5 4 7 D. 4 2 5 6 1 7 3

Answer:A B D

Solution:二叉树遍历序什么的早都忘干净了……

众所周知,二叉树一共有三种深度优先遍历序,分别是先序遍历,中序遍历和后序遍历。这里先中后指的是记录根的时间,而左右子树的顺序总是先左子树再右子树。例如先序遍历,则先记录当前子树的根节点,然后递归对左子树做先序遍历,再递归对右子树做先序遍历;而中序遍历则先对左子树递归做中序遍历,然后记录根节点,最后对右子树递归做中序遍历。

对于一棵树,只要确定中序遍历序和另外任意一个深度优先遍历序,即可唯一确定这棵树的形态,但是只知道先序遍历和后序遍历则不能唯一确定这棵树的形态。需要指出的是,确定先序遍历和后序遍历以后,即可确定节点间的父子关系,但是无法区分左右节点

对于本题,首先可以铁憨憨枚举四个选项,这样即可得到中序遍历和先序遍历,再验证后序遍历即可。

考虑更一般化的做法,通过已知的两个遍历序确定节点间的父子关系即可。

例如,根据先序遍历,\(2\) 一定是 \(1\) 的孩子,根据后序遍历,\(3\) 一定是 \(1\) 的孩子,因此 \(2,~3\) 一定是 \(1\) 的两个孩子,又因为 \(2\) 在先序遍历中比 \(3\) 先出现,所以 \(2\) 是左孩子,\(3\) 是右孩子。

又根据先序遍历的性质,右孩子左侧的一定都是左子树或根,因此 \(2,~4,~5,~6\) 都在根的左子树内。根据先序遍历,\(4\) 要么是 \(2\) 的孩子,要么是 \(2\) 的兄弟。但由于 \(3\) 是 \(2\) 的兄弟,所以 \(4\) 是 \(2\) 的孩子。

根据后序遍历,可以确定 \(5\) 是 \(2\) 的另一个孩子,又由于 \(4\) 在 \(5\) 之前出现,因此 \(4\) 是左孩子,\(5\) 是右孩子。

根据先序遍历,\(6\) 是 \(5\) 的孩子,但是由于 \(5\) 只有一个孩子,无法确认左右。至此,左子树的父子关系已经全部确定,类似的可以确定右子树的父子关系,然后即可确定可能的中序遍历。

今年 CSP 只考选择题来着,我还是选择铁憨憨枚举选项吧

4、(07senior,18,不定项选择) 在下列关于算法复杂性的说法中,正确的有( )。

A. 算法的时间复杂度,是指它在某台计算机上具体实现时的运行时间

B. 算法的时间复杂度,是指对于该算法的一种或几种主要的运算,运算的次数与问题的规模之间的函数关系

C. 一个问题如果是NPC类的,就意味着在解决该问题时,不存在一个具有多项式时间复杂度的算法.但这一点还没有得到理论上的证实,也没有被否定

D. 一个问题如果是NP类的,与C有相同的结论

Answer:BC

Solution:首先 A,B 的对错显然,这边记录一下有关P问题,NP问题,NPC问题,NP-Hard问题的有关定义。

对于一个问题,如果它可以使用多项式时间复杂度的算法进行求解,则它是一个 P问题(polynomial problem),这里 polynomail 指的是 “多项式的”。例如,给定 \(n\) 个数对他们按照不降序进行排序,可以使用 \(O(n \log n)\) 的算法解决,因此这个问题是一个P问题。

对于一个问题,如果它可以用多项式时间复杂度的算法来验证一个解的正确性,则他是一个 NP问题(Non-deterministic Polynomial Problem),这里 Non-deterministic 指 “不确定的”,NP问题的中文直译为 “非确定性多项式问题”。这里不要求对原问题进行求解,只要给出原问题的一个解以后就可以用多项式的算法来验证这个解是否正确的问题,都被称为 NP 问题。例如,“对于一张 \(n\) 个点 \(m\) 条边的有向图,求它的一条回路满足经过每个节点恰好一次”这个问题(哈密尔顿回路)想要求解目前只有指数级的枚举每条边的选择情况,但是一旦我给出这个问题的一个解,我便可以使用 \(O(m)\) 的算法来轻松验证这个解是否正确,因此这个问题是一个 NP 问题。同样的,对于上面一段的排序问题,如果你给出了它的一个解,我显然可以 \(O(n)\) 去验证这个解是否正确,因此“给 \(n\) 个数进行排序” 也是一个 NP 问题。

一个可以证明的事实是,一个 P 问题一定是一个 NP 问题,也即一个可以用多项式时间复杂度求解的问题一定是可以用多项式时间复杂度检验一个解的正确性。因此,P 问题集合是 NP 问题集合的子集。而 P 问题集合是否等于 NP 问题集合,就是著名的 P-NP 问题,又成为 P =? NP 问题。目前的普遍观点是不等于,但是无法给出证明。

归约:对于一个问题 \(A\),如果他能经过多项式时间复杂度的转化而转化成问题 \(B\),也即得出问题 \(B\) 的解以后可以用多项式的时间复杂度转化为问题 \(A\) 的解,则称 \(A\) 可以 归约 为 \(B\)。例如将一元一次方程加上一个系数为 \(0\) 的二次项以后可以通过求解一元二次方程的方法求解,因此说求解一元一次方程可以归约为求解一元二次方程。一个显然的事实是归约具有传递性,即若 \(A\) 可以归约为 \(B\),\(B\) 可以归约为 \(C\),则 \(A\) 可以归约为 \(C\)。显然,只要可以使用多项式复杂度解决 \(C\),即可使用多项式复杂度解决 \(A\)。

存在一个 NP 问题 \(A\),使得所有 \(NP\) 问题都可以归约为 \(A\) 问题,而 \(A\) 问题有很多个并且他们是完全等价的,所有的 \(A\) 问题被称为 NPC问题(Non-deterministic Polynomial Complete Problem)。显然只要给任意一个 NPC 问题找到一个多项式算法,即可用多项式时间复杂度解决所有 NP 问题,从而证明 P = NP,但是目前并不能在多项式时间复杂度内解决任何一个 NPC 问题。根据第一句话,我们给出 NPC 问题的定义:

1、该问题是一个 NP 问题

2、任何一个 NP 问题都可以通过有限次的归约最终归约为该问题

只要满足上述两个条件的问题,都被称为 NPC 问题。第一个 NPC 问题是逻辑电路问题:给定一个有多个输入端的和多个逻辑门以及一个输出端的逻辑电路,求逻辑门的一个输入满足这个逻辑门的输出端为 true。

对于上面 NPC 问题的定义,如果一个问题满足第二条,但不一定满足第一条,则其是一个 NP-Hard问题(Non-deterministic Polynomial Hard Problem)。根据定义,NP-Hard 问题可以被任何一个 NP 问题使用多项式的时间复杂度归约到,但是自身不一定是一个 NP 问题。

因此我得出结论:NOIp的大部分题目都是 P (雾)

(07senior,21) 给定 \(n\) 个有标号的球,标号依次为1,2,…,n。将这 \(n\) 个球放入 \(r\) 个相同的盒子里,不允许
有空盒,其不同放置方法的总数记为 \(S(n,r)\),求 \(S(7,~4)\)。

Answer:350

Solution:没打算做填空来着,但是看到第二类斯特灵数就记一下吧……反正我也忘了。

题面即为第二类斯特灵数的定义。当求 \(S(i, j)\) 时,假设前 \(i-1\) 个球都已经放到了盒子里,现在考虑第 \(i\) 个球:

如果前 \(i-1\) 个球放到了 \(j\) 个盒子里,那么这个球随便找个盒子放即可,方案数为 \(j \times S_{i - 1,j}\)

如果前 \(i - 1\) 个球放到了 \(j - 1\) 个盒子里,那么这个球只能自己新放一个盒子,方案数为 \(S_{i - 1, j -1}\)。

根据加法原理,\(S_{i,j} = S_{i - 1, j - 1} + j \times S_{i - 1, j}\)

(07junior,7) LAN的含义是( )

​ A.因特网 B.局域网 C.广域网 D.城域网

Answer:B

Solution:休学不考 IT 会考的报应来了

局域网:LAN(Local Area Network);广域网:WAN(Wide Area Network);城域网:MAN(Metropolitan Area Network)

下次还是对着英文蒙吧

NOIp初赛题目整理的更多相关文章

  1. Noip往年题目整理

    Noip往年题目整理 张炳琪 一.历年题目 按时间倒序排序 年份 T1知识点 T2知识点 T3知识点 得分 总体 2016day1 模拟 Lca,树上差分 期望dp 144 挺难的一套题目,偏思维难度 ...

  2. Noip 2017 题目整理

    目录 2017Noip: 小凯的疑惑 时间复杂度 逛公园 奶酪 宝藏(50fen) 列队(QAQ不会,以后再研究吧) 2017Noip: 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正 ...

  3. 史上最全NOIP初赛知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  4. NOIP初赛:完善程序做题技巧

    最近写的文章好像还很多的.那么今天我们来讨论NOIP初赛的题型--完善程序.完善程序相对是比较难的题目了.全卷100分,完善程序占了大概26分,占比非常大.如果和英语考试试卷做比较,相当于首字母填空( ...

  5. NOIP初赛 之 逻辑运算

    NOIP初赛 之 逻辑运算 逻辑运算先掌握各种运算,注意运算符的级别比较,做题是要细心.在NOIP中一般一题,分值为1.5分. 概念介绍: 非:not  ¬      与:and ∧      或:o ...

  6. NOIP初赛知识点大全-普及+提高组

    NOIP初赛知识点大全-普及+提高组 https://mp.weixin.qq.com/s/vSXLDxmbBoFfZPzD8lrt3w

  7. 【数学】NOIP数论内容整理

    NOIP数论内容整理 注:特别感谢sdsy的zxy神仙以及lcez的tsr筮安帮助审稿 一.整除: 对于\(a,b~\in~Z\),若\(\exists~k~\in~Z\),\(s.t.~b~=~k~ ...

  8. NOIP初赛前一日记

    2018年10月12日,早晨7:25于机房. 早晨的鄞中,晨风还有点清冷.看着电脑上翻遍的资料,心里实在是有一种说不出的感觉. 说出来也算是丢脸——作为浙江选手,我为了NOIP2018的初赛,停课了一 ...

  9. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

随机推荐

  1. 算法(贪心|BF|KMP)

    贪心算法 前置知识 const Greedy = num => { //贪心 let arr = [100, 20, 10, 5, 2, 1] let count = 0; for (let i ...

  2. 直接操作DOM一定比虚拟DOM操作耗时,diff算法,key值,虚拟 DOM的定义

    直接操作DOM一定比虚拟DOM操作耗时吗? 或者一次直接DOM操作一定比一次虚拟DOM操作耗时吗? 1)虚拟DOM的本质就是一个JS对象,虚拟DOM减少了真实DOM的操作,当修改数据的时候,就是修改虚 ...

  3. java报错 pom.xml第一行报"org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project...

    https://www.cnblogs.com/appium/p/11168441.html 新建Maven项目时,每个pom文件第一行都报错. 一.问题分析 原因就是你的maven的配置文件不是最新 ...

  4. 简单讲解Asp.Net Core自带IOC容器ServiceCollection

    一.  理解ServiceCollection之前先要熟悉几个概念:DIP.IOC.DI.Ioc容器: 二.  接下来先简单说一下几个概念问题: 1.DIP(依赖倒置原则):六大设计原则里面一种设计原 ...

  5. linux系统shell基础知识入门

    什么是shell shell就是我们常说的命令行程序,它是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入要执行的命令.在Linux中安装多个shell是可行的,一般系统有默认的sh ...

  6. Java I/O系统学习系列三:I/O流的典型使用方式

    尽管可以通过不同的方式组合IO流类,但我们可能也就只用到其中的几种组合.下面的例子可以作为典型的IO用法的基本参考.在这些示例中,异常处理都被简化为将异常传递给控制台,但是这只有在小型示例和工具中才适 ...

  7. contos7自启动django服务

    研究了很多种办法 1.新建一个sh 文件 vi django_autostart.sh 2.编辑文件内容 #!/bin/bash #chkconfig:345 61 61 //此行的345参数表示,在 ...

  8. Spring Boot 使用 JWT 进行身份和权限验证

    上周写了一个 适合初学者入门 Spring Security With JWT 的 Demo,这篇文章主要是对代码中涉及到的比较重要的知识点的说明. 适合初学者入门 Spring Security W ...

  9. Delphi编译/链接过程

    下面展示了Delphi是怎样编译源文件,并且把它们链接起来,最终形成可执行文件. 当Delphi编译项目(Project)时,将编译项目源文件.窗体单元和其他相关单元,在这个过程中将会发生好几件事情: ...

  10. Gin-Go学习笔记八:Gin-Web框架 常用的包

    常用的包 1>     在java,.net,php,node.js等语言常常会使用到包的概念.包的使用,可以加快项目的进度的开发,以及更好的实现项目的效果.我在网上查到了包的作用如下: 1.包 ...