- 题解
CSP 2022 S1
- 2023-9-9 15:34:32 @
1.答案:B 解析:ls 为列出目录下的文件夹和文件,cd 为切换目录,cp 为复制,all 只是一个操作值。
2.答案:A 解析:第二题就是一个下马威……这几年确实没考过 time 命令,弄得措手不及。 real 表示实际使用时间,user 表示用户态使用时间,sys 表示内核态使用时间,故为 A。顺带一提,real 远大于剩下两个是因为把大量的文件读入时间算了进去。
3.答案:D 解析:手模一遍进出栈的操作就很容易得答案了。话说 D 选项必须进行 5 次退栈操作……
4.答案:C 解析:插入和冒泡的时间复杂度都为 O(n^2),快速排序虽然平均时间复杂度为 O(nlogn),但在极端数据下会退化成 O(n^2),而归并排序在极端情况下时间复杂度也为 O(nlogn)。
5.答案:A 解析:基数排序的本质是对每一位(按给定的 k 值确定进制,具体可以参考下面的阅读程序)计算排名,如果某个数字改变了,那么只有这一个数字的排名会受到影响,其他数字不变。
6.答案:B
解析:熟悉各种指针操作就很容易得到答案,可惜没啥人用,实际写题也没必要用。
unsigned char
会取八位二进制数字,也就是两位十六进制。那么小端就是取 x 的最后两位,大端就是取最前两位。
7.解析:按照前序遍历的原则手模就行了,不多解释。三叉树的前序遍历顺序是根-左-中-右。
8.答案:B 解析:学过连通性问题那一块的知识就可以轻松答出来了。 对于一张有向图,如果这张图任意两个节点都可以到达,那么这张图是强连通图。根据这个定义,ACD 都是对的。 对于 B 选项,我们可以构造出一个反例:画一个四边形,取顶点为结点,此时这是一个强连通图,但对角线的点没有边相连。
9.答案:D 解析:欧拉回路:通过图中每条边恰好一次的回路 根据欧拉回路的判定定理(每个点的度数必定为偶数),可知 2 正规图一定有欧拉回路。 然后就可以构造特殊值了,画一个三角形,取顶点为结点,此时 2 正规图有且只有一个,符合的答案就是 D。
10.答案:A 解析:很简单的排列组合,答案就是
11.答案:C 解析:也是很简单的排列组合,答案就是26^2 + 10^3
12.答案:D 解析:去年就考过一次哈希冲突,这次也很简单。按照题意模拟即可。
13.答案:B 解析:毫不意外地考了时间复杂度分析,不过难度没想象的难(我递推方程呢?!)。
外层会执行 n 次,内层由于每次 j 扩大两倍,执行次数是 log2n,所以答案就是 O(nlogn)。
14.答案:B 解析:假设最大的数在最后面,从头开始找数字,自然就要找 n−1次了。 什么?你问我为什么不是 n?当然是因为第一个数不用比较啦……
15.答案:B 解析:这个函数实际上是 阿克曼函数,增长速度非常快,感兴趣可以查一下资料。 还是手模出结果,就是有点累人……
单选题终于结束啦!来看看阅读程序ww
答案(A 为正确 B 为错误):ABADAB 解析:不难看出这是一个找字符串位置的函数,返回 b 在 a 中第一次出现的下标。原理是先对 b 构造一个用于跳转的 shift 数组(记录右数第一次出现这个字符的位置,不出现的字符记为 b 的长度加一),然后对 a 一位位比较,找不到就利用 shift 数组跳转。 16 题,显然不存在输出 −1。 17 题,由于是第一次出现,所以取 3。 18 题,由于字符串前面不存在字符 2,所以会一直向后跳转直到匹配成功,也就只会自增两次。 19 题,取一个 m=1 且完全不匹配的情况就是答案。 20 题,有点考 string 的用法,不过也可以猜到是 A。 21 题,每次找到 a 都会自增一次,结果就是 10 次。
答案:BBADDC 解析:不难发现这就是一个基数排序,然后就没什么好解释的了( 22 题,显然基数排序是稳定的。 23 题,空间复杂度还和 k 有关。 24 题,数循环即可得到答案。 25 题,手模即可。 26 题,由于时间复杂度为 O(m(n+k)),所以答案和 n 有关,只给定 vali 最大值没法确定。 27 题要注意计数排序和桶排序的区别(虽然很多教材都没区分过……)。桶排序会对数据分类储存,而计数排序直接统计每个数出现次数。根据这点,基数排序会退化成计数排序。
答案:ABBABB 解析:−k 进制转换。鬼知道为什么 CCF 要整个负的…… 28 题,每次除以一次 k,所以是 logk。 29 题,这里类型转换是为了正确输出字母,如果删掉自然不会出答案。 30 题,根据 k 进制的关系可得答案。 31 到 33 题都可以手模得到,不解释。
答案:DBCCA 解析:熟悉归并排序就可以知道答案,本质上就是对两边分别二分找。 34 题,cnt 代表两个数组中的数字,所以直接相加,注意边界问题。 35 题,下面操作说明 a1 左半部分一定小于 a2右半部分,所以为小于等于。 36 题,循环结束条件为 left1>right1或者 left2>right2。
答案:ACAAC 解析:其实就是一个记忆化搜索,不过又加一个 go 函数输出方案。 39 题,这里的决策是 y 的水倒入 x。 40 题,和上面相反,把 x 倒入 y。 41 题,搜索边界自然就是两桶水都是 c 升。 42 题和 43 题直接照抄下面的 go 函数即可。