~~~~~ 总复习计划
前言
~~~~~
考虑到我烂的惊人的初赛,我 小脑一热 在仔细思考后决定扩展业务——讲初赛。当然,这更多的是为了帮我自己巩固,毕竟要是初赛没过我就只能剖腹自尽了。
~~~~~
我会选一些比较好的题目来讲,什么题目比较好?那当然就是 我做错的题目 我精心选择的题目 。希望大家和我一起学习,有问题的打可在评论区@我,我一定会看到的,因为我发了这么多篇文章就没有几个真人发的评论 。
~~~~~ 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×(n−1) 条边,但这里是有向图(我就是这样被坑了),所以有 n × ( n − 1 ) ÷ 2 n\times (n-1)\div 2 n×(n−1)÷2条边。那这道题就是找到最小的 n n n,使得 n × ( n − 1 ) ÷ 2 ≥ 28 n\times (n-1)\div 2\geq 28 n×(n−1)÷2≥28,所以 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[i−1][0]+dp[i−1][1]
~~~~~
d
p
[
i
]
[
1
]
=
d
p
[
i
−
1
]
[
0
]
+
1
dp[i][1]=dp[i-1][0]+1
dp[i][1]=dp[i−1][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 选项: