2024 NOIP 初赛复习计划

      ~~~~~      总复习计划

前言

      ~~~~~      考虑到我烂的惊人的初赛,我 小脑一热 在仔细思考后决定扩展业务——讲初赛。当然,这更多的是为了帮我自己巩固,毕竟要是初赛没过我就只能剖腹自尽了。

      ~~~~~      我会选一些比较好的题目来讲,什么题目比较好?那当然就是 我做错的题目 我精心选择的题目 。希望大家和我一起学习,有问题的打可在评论区@我,我一定会看到的,因为我发了这么多篇文章就没有几个真人发的评论

      ~~~~~      ps:初赛前每天晚上大概率会更新,每周至少更新 5 5 5 次.

选择题

gesp 2024 3月 7级 单选第 1 题

  ~  
下列关于排序的说法,正确的是( )。

      ~~~~~       A . A. A. 冒泡排序是最快的排序算法之一。

      ~~~~~       B . B. B. 快速排序通常是不稳定的。

      ~~~~~       C . C. C. 最差情况, N N N 个元素做归并排序的时间复杂度为 O ( N ) O(N) O(N)

      ~~~~~       D . D. D. 以上均不正确。

答案: B B B

解析:

      ~~~~~       A A A 选项:冒泡排序是 O ( N 2 ) O(N^2) O(N2) 的复杂度,而很多排序最坏情况下都是 O ( N × l o g ( N ) ) O(N\times log(N)) O(N×log(N)) 的,所以冒泡排序自然不是最快的。

      ~~~~~       B B B 选项:快速排序就是不稳定的。记住除了快速排序、选择排序、堆排序都是稳定的。

      ~~~~~       C C C 选项:归并排序在最坏情况下也有着 O ( N × l o g ( N ) ) O(N\times log(N)) O(N×log(N)) 的优秀复杂度,所以是错的。

      ~~~~~       D D D 选项: B B B 是对的,所以 D D D 自然是错的。

gesp 2024 3月 7级 单选第 3 题

  ~  
下面有关 C++ 类的说法,错误的是( )。

      ~~~~~       A . A. A. C++ 类对象销毁时,会执行析构函数。

      ~~~~~       B . B. B. C++ 类可以通过定义构造函数实现自动类型转换。

      ~~~~~       C . C. C. C++ 类可以通过重载 [   ] [~] [ ] 运算符实现通过给定下标访问数组成员的元素。

      ~~~~~       D . D. D. C++ 类可以包含任意类型的成员变量。

答案: D D D

解析:

      ~~~~~       A A A 选项:什么是析构函数,就是在类的销毁时自动调用的函数,用来执行清理工作,与在函数创建时自动调用的构造函数相对应。我在这篇文章内详细的讲解了构造函数与析构函数,有兴趣的可以去看一下。

      ~~~~~       B B B 选项:C++ 类可以通过定义带有单个参数的构造函数来实现自动类型转换,举个例子:

#include<bits/stdc++.h>
using namespace std;
class MyClass{
public:
    int value;
    MyClass(int v){value=v;}// 转换构造函数
};
int main(){
    MyClass obj = 114514;  // int 类型自动转换为 MyClass 类型
    cout<<obj.value<<endl;
    return 0;
}

      ~~~~~      程序会正常运行并输出 “ 114514 114514 114514”。

      ~~~~~       C C C 选项:当然也是可以的,还是举个例子:

#include<bits/stdc++.h> 
using namespace std;
class Myclass{
public:
	int a[15];
    int& operator[](int i) {
        if(i>=0&&i<15)return a[i];
        else return a[0];
    }
};
int main(){
	Myclass my;
	for(int i=1;i<=5;i++)my[i]=i;
	for(int i=1;i<=5;i++)cout<<my[i]<<" ";
}

      ~~~~~      程序会正常运行并输出 “ 1   2   3   4   5 1~2~3~4~5 1 2 3 4 5”。

      ~~~~~       D D D 选项:不可以,C++类不能包含自身,也不能包含定义在它下面的类。

gesp 2024 3月 7级 单选第 4 题

一个连通的简单无向图,共有28条边,则该图至少有( )个顶点。

         ~~~~~~~~          A . A. A. 6          ~~~~~~~~          B . B. B. 7          ~~~~~~~~          C . C. C. 8          ~~~~~~~~          D . D. D. 9

答案: C C C

解析:

      ~~~~~      一个 n n n 个点的有向图有 n × ( n − 1 ) n\times(n-1) n×(n1) 条边,但这里是有向图(我就是这样被坑了),所以有 n × ( n − 1 ) ÷ 2 n\times (n-1)\div 2 n×(n1)÷2条边。那这道题就是找到最小的 n n n,使得 n × ( n − 1 ) ÷ 2 ≥ 28 n\times (n-1)\div 2\geq 28 n×(n1)÷228,所以 n n n 8 8 8,选 C C C

gesp 2024 3月 7级 单选第 5 题

已知一颗二叉树的中序遍历序列为:{ C F B A E D G },后序遍历序列为:{ F C B E G D A },则下列说法中正确的是( )。

      ~~~~~       A . A. A. 该树是平衡二叉树。

      ~~~~~       B . B. B. 该树的高为 4 4 4

      ~~~~~       C . C. C. 该树有 4 4 4 个叶节点。

      ~~~~~       D . D. D. 以上说法都不对。

答案: B B B

解析:

      ~~~~~      首先我们把这棵树画出来:
树
      ~~~~~       A A A 选项:首先我们要知道什么是平衡树,平衡树就是每个儿子的左右子树高度差不超过 1 1 1。在这张图中, B B B 的左子树的高度是 2 2 2,而右子树的高度是 0 0 0,所以这棵树不是平衡二叉树。

      ~~~~~       B B B 选项:这棵树的高度就是 4 4 4,但其实这道题有点不严谨,因为它没有规定根节点的高度是多少。

      ~~~~~       C C C 选项:这棵树只有 3 3 3 个叶子节点,所以 C C C 选项是错的。

      ~~~~~       D D D 选项:因为 B B B 是对的,所以 D D D 是错的。

2021 CSP - J 单选第 1 题

一下不属于面向对象的程序设计语言的是( )。

      ~~~~~       A . A. A. C++

      ~~~~~       B . B. B. Python

      ~~~~~       C . C. C. Java

      ~~~~~       D . D. D. C

答案: D D D

解析:

      ~~~~~      要了解每个语言为什么(不)是面向对象的,要对每种语言都有了解,不太好将,我们只需要记住常见语言中除了 C C C 语言都是面向对象的就行了。

2021 CSP - J 单选第 15 题

有四个人要从 A 点坐一条船过河到 B 点,船一开始在 A 点。该船一次最多可坐两个人。
已知这四个人中每个人独自坐船的过河时间分别为 1, 2, 4, 8, 且两个人坐船的过河时
间为两人独自过河时间的较大者。则最短( )时间可以让四个人都过河到 B 点(包括从
B 点把船开回 A 点的时间)。

      ~~~~~       A . A. A. 14

      ~~~~~       B . B. B. 15

      ~~~~~       C . C. C. 16

      ~~~~~       D . D. D. 17

答案: B B B

解析:

      ~~~~~      我们不希望让慢的人走两遍,所以考虑先放一个比较快的过去,由他把船开回来。

      ~~~~~      具体过程: 1 , 2 1,2 1,2 过河, 1 1 1 返回。 4 , 8 4,8 4,8 过河, 2 2 2 返回。 1 , 2 1,2 1,2 过河。

      ~~~~~       2 + 1 + 8 + 2 + 2 = 15 2+1+8+2+2=15 2+1+8+2+2=15

      ~~~~~      这种题很坑,要多模拟几遍,具体比赛时可以先猜一个答案,最后再回来看这道题(千万别忘了,我就忘过 )。

2021 CSP - S 单选第 13 题

8 8 8 个苹果从左到右排成一排,你要从中挑选至少一个苹果,并且不能同时挑选相邻的两个苹果,一共有( )种方案。

      ~~~~~       A . A. A. 36

      ~~~~~       B . B. B. 48

      ~~~~~       C . C. C. 54

      ~~~~~       D . D. D. 64

答案: C C C

解析:

      ~~~~~      这种题可以考虑用动态规划的做法。

      ~~~~~       d p [ i ] [ 0 / 1 ] dp[i][0/1] dp[i][0/1] 为考虑到前 i i i 个苹果,是否选第 i i i 个苹果,不选相邻的苹果的方案数。

      ~~~~~      转移:

      ~~~~~       d p [ i ] [ 0 ] = d p [ i − 1 ] [ 0 ] + d p [ i − 1 ] [ 1 ] dp[i][0]=dp[i-1][0]+dp[i-1][1] dp[i][0]=dp[i1][0]+dp[i1][1]
      ~~~~~       d p [ i ] [ 1 ] = d p [ i − 1 ] [ 0 ] + 1 dp[i][1]=dp[i-1][0]+1 dp[i][1]=dp[i1][0]+1

      ~~~~~      边界:

      ~~~~~       d p [ 1 ] [ 0 ] = 0 , d p [ 1 ] [ 1 ] = 1 dp[1][0]=0,dp[1][1]=1 dp[1][0]=0,dp[1][1]=1

      ~~~~~      根据 d p dp dp 方程列个表出来:
图
      ~~~~~      那答案就是 d p [ 8 ] [ 0 ] + d p [ 8 ] [ 1 ] = 33 + 21 = 54 dp[8][0]+dp[8][1] =33+21=54 dp[8][0]+dp[8][1]=33+21=54,所以选 C C C

2021 CSP - S 单选第 14 题

设一个三位数 n = a b c ‾ n=\overline{abc} n=abc a , b , c a,b,c a,b,c 均为 1∼9 之间的整数,若以 a , b , c a,b,c a,b,c 作为三角形的三条边可以构成等腰三角形(包括等边),则这样的 n 有( )个。

      ~~~~~       A . A. A. 81

      ~~~~~       B . B. B. 120

      ~~~~~       C . C. C. 165

      ~~~~~       D . D. D. 216

答案: C C C

解析:

      ~~~~~      首先, a b c ‾ \overline{abc} abc 中这个上划线的意思就是 n = a × 100 + b × 10 + c n=a\times100+b\times10+c n=a×100+b×10+c

      ~~~~~      考虑 a , b a,b a,b 为不同数时, c c c 的取值范围。

      ~~~~~       a , b a,b a,b 均为 1 1 1 c c c 可以取 [ 1 , 1 ] [1,1] [1,1]

      ~~~~~       a , b a,b a,b 均为 2 2 2 c c c 可以取 [ 1 , 3 ] [1,3] [1,3]

      ~~~~~       a , b a,b a,b 均为 3 3 3 c c c 可以取 [ 1 , 5 ] [1,5] [1,5]

      ~~~~~       a , b a,b a,b 均为 4 4 4 c c c 可以取 [ 1 , 7 ] [1,7] [1,7]

      ~~~~~       a , b a,b a,b 大于等于 5 5 5 c c c 可以取 [ 1 , 9 ] [1,9] [1,9]

      ~~~~~       A A A AAA AAA 的形式有 9 9 9 个。

      ~~~~~       A A B AAB AAB 的形式有 0 + 2 + 4 + 6 + 5 × 8 = 52 0+2+4+6+5\times 8=52 0+2+4+6+5×8=52 个。

      ~~~~~      而每种 A A B AAB AAB 可以组成 3 3 3 个数。

      ~~~~~      所以最终答案就是 9 + 52 × 3 = 165 9+52\times 3=165 9+52×3=165

      ~~~~~      所以选 C C C

判断题

阅读程序题

2021 CSP - J 阅读程序第 1 题

#include <iostream>
using namespace std;

int n;
int a[1000];

int f(int x)
{
	int ret = 0;
	for (; x; x &= x - 1) ret++;
	return ret;
}

int g(int x)
{
	return x & -x;
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) cin >> a[i];
	for (int i = 0; i < n; i++)
		cout << f(a[i]) + g(a[i]) << ' ';
	cout << endl;
	return 0;
}

19.【判断题】当输入为“1 511998”时,输出为 “18”()

答案: A A A

解析:

      ~~~~~       511998 511998 511998 在二进制下是 1111100111111111110 1111100111111111110 1111100111111111110

      ~~~~~      知道了这个就好做了,我赛场上一时脑抽忘记怎么转 2 2 2 进制了,希望大家不要向我学习。

20.【选择题】当输入为“2 -65536 2147483647”时,输出为( )。

      ~~~~~       A . A. A. 65532    33 65532~~33 65532  33

      ~~~~~       B . B. B. 65552   32 65552~32 65552 32

      ~~~~~       C . C. C. 65535    34 65535~~34 65535  34

      ~~~~~       D . D. D. 65554    33 65554~~33 65554  33

答案: B B B

解析:

      ~~~~~      负数的二进制表示就是其相反数的二进制的补码,补码就是一个数在二进制下的每一位取反后再加上 1 1 1

      ~~~~~       65536 65536 65536 的二进制( i n t int int 默认 32 32 32位)表示是 0000 , 0000 , 0000 , 0001 , 0000 , 0000 , 0000 , 0000 0000,0000,0000,0001,0000,0000,0000,0000 0000,0000,0000,0001,0000,0000,0000,0000,每一位取反后是 1111 , 1111 , 1111 , 1110 , 1111 , 1111 , 1111 , 1111 1111,1111,1111,1110,1111,1111,1111,1111 1111,1111,1111,1110,1111,1111,1111,1111,加 1 1 1 后就是 1111 , 1111 , 1111 , 1111 , 0000 , 0000 , 0000 , 0000 1111,1111,1111,1111,0000,0000,0000,0000 1111,1111,1111,1111,0000,0000,0000,0000。而另一个数就用一般的方法就行了 … \ldots 吗?如果你做了非常多的题的话,你就可以发现 2147483647 2147483647 2147483647 就是 i n t int int 的最大值,也就是 32 32 32 1 1 1

2021 CSP - S 阅读程序第 1 题

      ~~~~~      

      ~~~~~       16. 16. 16. 【判断题】将第 21 行中 t 的类型声明从 int 改为 double, 不会 影响程序运行的结果。()

答案: A A A

解析: t t t 的类型变了,但应为 t t t d o u b l e double double 类型下也为整数,所以不会 影响程序运行的结果。

      ~~~~~       19. 19. 19. 【判断题】当输入为 0   0   0   1   1   0   0   1 0~0~0~1~1~0~0~1 0 0 0 1 1 0 0 1 时,输出为 1.3090 1.3090 1.3090 。( )

答案: A A A

解析:

      ~~~~~      首先我们要知道代码中的 a c o s ( 0.5 ) acos(0.5) acos(0.5) 就是 π / 3 \pi/3 π/3,不知道怎么办?尝试到代码中找用到了 r r r 的地方,我们大概可以猜测第 23 23 23 行就是用来计算球的体积的,如果你知道 V = 4 3 π r 3 V=\frac{4}{3}\pi r^3 V=34πr3,那我们就可以知道 r = π / 3 r=\pi /3 r=π/3。如果你像我一样还没有学球的体积计算公式,那就把出题人吊起来打一顿

      ~~~~~      然后我们把 r = π / 3 r=\pi / 3 r=π/3代入模拟计算即可。

      ~~~~~       21. 21. 21. 【选择题】这段代码的含义为( )。

      ~~~~~       A . A. A. 求圆的面积并

      ~~~~~       B . B. B. 求球的体积并

      ~~~~~       C . C. C. 求球的体积交

      ~~~~~       D . D. D. 求椭球的体积并

答案: C C C

解析:

      ~~~~~      为了防止有人像我一样把并集和交集搞混,这里再提一下,交集就是两个集都有的东西,并集就是包含这两个集合中所有元素的集合。

      ~~~~~      首先他有 3 3 3 个数表示坐标,所以只能是球形,排除 A , D A,D A,D

      ~~~~~      然后从 23 23 23 行的取 m i n min min 和 24 行的“两球不交则输出 0 0 0 ”可以看出是交集。

2021 CSP - S 阅读程序第 2 题

在这里插入图片描述
      ~~~~~       25. 25. 25. solve1(1, n) 的时间复杂度为( )。

      ~~~~~       A . A. A. O ( l o g   n ) O(log~n) O(log n)

      ~~~~~       B . B. B. O ( n ) O(n) O(n)

      ~~~~~       C . C. C. O ( n   l o g   n ) O(n~log~n) O(n log n)

      ~~~~~       D . D. D. O ( N 2 ) O(N^2) O(N2)

答案: B B B

解析:

      ~~~~~      第一层会调用 2 0 2^0 20 次函数,第二层会调用 2 1 2^1 21 次函数,第三层会调用 2 2 2^2 22 次函数。

      ~~~~~      所以总调用次数就是 2 0 + 2 1 + 2 2 + 2 3 + … + 2 l o g ( n ) ≈ n 2^0+2^1+2^2+2^3+\ldots+2^{log(n)}\approx n 20+21+22+23++2log(n)n,所以选 B B B

完善程序题

讲题模板

      ~~~~~      这些模板用于加速我的更新速度。

题目来源

题面

      ~~~~~       A . A. A.

      ~~~~~       B . B. B.

      ~~~~~       C . C. C.

      ~~~~~       D . D. D.

答案:$$

解析:

      ~~~~~       A A A 选项:

      ~~~~~       B B B 选项:

      ~~~~~       C C C 选项:

      ~~~~~       D D D 选项:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值