CSP 2021 提高级第一轮解析版

第 1 题

在 Linux 系统终端中,用于列出当前目录下所含的文件和子目录的命令为( )。

 A. ls
 B. cd
 C. cp
 D. all


本题共 2 分

第 2 题

二进制数 001010102001010102​ 和 000101102000101102​ 的和为()。

 A. 001111002001111002​
 B. 010000002010000002​
 C. 001111002001111002​
 D. 010000102010000102​


本题共 2 分

第 3 题

在程序运行过程中,如果递归调用的层数过多,可能会由于( )引发错误。

A. 系统分配的栈空间溢出
 B. 系统分配的队列空间溢出
 C. 系统分配的链表空间溢出
 D. 系统分配的堆空间溢出


本题共 2 分

第 4 题

以下排序方法中,( )是不稳定的。

 A. 插入排序
 B. 冒泡排序

 C. 堆排序

 D. 归并排序


本题共 2 分

第 5 题

以比较为基本运算,对于 2n2n 个数,同时找到最大值和最小值,最坏情况下需要的最小的比 较次数为( )。

 A. 4n−24n−2
 B. 3n+13n+1
 C. 3n−23n−2
 D. 2n+12n+1


本题共 2 分

第 6 题

现有一个地址区间为 0∼100∼10 的哈希表,对于出现冲突情况,会往后找第一个空的地址存储 (到 1010 冲突了就从 00 开始往后),现在要依次存储 (0,1,2,3,4,5,6,7),哈希函数为 h(x)=x2mod11h(x)=x2mod11。请问 77 存储在哈希表哪个地址中( )。

 A. 5
 B. 6
 C. 7
 D. 8


本题共 2 分

第 7 题

GG 是一个非连通简单无向图(没有自环和重边),共有 3636 条边,则该图至少有( )个点。

 A. 8
 B. 9
 C. 10
 D. 11


本题共 2 分

第 8 题

令根结点的高度为 11,则一棵含有 20212021 个结点的二叉树的高度至少为( )。

 A. 10
 B. 11
 C. 12
 D. 2021


本题共 2 分

第 9 题

前序遍历和中序遍历相同的二叉树为且仅为( )。

 A. 只有 11 个点的二叉树
 B. 根结点没有左子树的二叉树
 C. 非叶子结点只有左子树的二叉树
 D. 非叶子结点只有右子树的二叉树


本题共 2 分

第 10 题

定义一种字符串操作为交换相邻两个字符。将 DACFEBDACFEB 变为 ABCDEFABCDEF 最少需要 ( ) 次上述操作。

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


本题共 2 分

第 11 题

有如下递归代码

solve(t, n):
  if t=1 return 1
  else return 5*solve(t-1,n) mod n

则 solve(23,23) 的结果为( )。

 A. 1
 B. 7
 C. 12
 D. 22


本题共 2 分

第 12 题

斐波那契数列的定义为: F1=1F1​=1,F2=1F2​=1,Fn=Fn−1+Fn−2Fn​=Fn−1​+Fn−2​(n≥3)(n≥3) 。现在用如下程序来计算斐波那契数列的第 nn 项,其时间复杂度为( )。

F(n):
  if n<=2 return 1
  else return F(n-1) + F(n-2)
  1.  A. O(n)O(n)
     B. O(n2)O(n2)
     C. O(2n)O(2n)
     D. O(n log n)O(n log n)


本题共 2 分

第 13 题

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

 A. 36
 B. 48
 C. 54
 D. 64


本题共 2 分

第 14 题

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

A. 81
 B. 120
 C. 165
 D. 216


本题共 2 分

第 15 题

有如下的有向图,节点为 A,B,⋯,JA,B,⋯,J, 其中每条边的长度都标在图中。则节点 AA 到节点 JJ 的最短路径长度为( )。 

  1.  A. 16
     B. 19
     C. 20
     D. 22


本题共 2 分

第 16 题

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √ ,错误填 × ;除特 殊说明外,判断题 1.51.5 分,选择题 33 分,共计 4040 分)

(1)

 假设输入的所有数的绝对值都不超过 10001000 ,完成下面的判断题和单选题:

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

  2. 将第 26、27 行中的 / sqrt(t) / 2替换为/ 2 / sqrt(t),不会影响程序运行的结果。( )

  3. 将第 28 行中的 x * x 改成 sq(x)y * y 改成 sq(y),不会影响程序运行的结果。( )

  4. (2 分) 当输入为 0 0 0 1 1 0 0 1 时,输出为 1.3090 ( )

单选题
  1. 当输入为 1 1 1 1 1 1 1 2 时,输出为( )。
    A. 3.1416
    B. 6.2832
    C. 4.7124
    D. 4.1888

  2. (2.5 分)这段代码的含义为( )。
    A. 求圆的面积并
    B. 求球的体积并
    C. 求球的体积交
    D. 求椭球的体积并

  1. 1. A. 

    正确

     B. 

    错误

  2. 2. A. 

    正确

     B. 

    错误

  3. 3. A. 

    正确

     B. 

    错误

  4. 4. A. 

    正确

     B. 

    错误

  5. 5. A. 

    3.1416

     B. 

    6.2832

     C. 

    4.7124

     D. 

    4.1888

  6. 6. A. 

    求圆的面积并

     B. 

    求球的体积并

     C. 

    求球的体积交

     D. 

    求椭球的体积并


本题共 12 分

第 17 题

(2)

 

 假设输入的所有数的绝对值都不超过 10001000 ,完成下面的判断题和单选题:

判断题
  1. 程序总是会正常执行并输出两行两个相等的数。( )

  2. 第 28 行与第 38 行分别有可能执行两次及以上。( )

  3. 当输入为 5 -10 11 -9 5 -7 时,输出的第二行为 7。( )

单选题
  1. solve1(1, n) 的时间复杂度为( )。
    A. O(log⁡n)O(logn)
    B. O(n)O(n)
    C. O(nlog⁡n)O(nlogn)
    D. O(n2)O(n2)

  2. solve2(1, n) 的时间复杂度为( )。
    A. O(log⁡n)O(logn)
    B. O(n)O(n)
    C. O(nlog⁡n)O(nlogn)
    D. O(n2)O(n2)

  3. 当输入为 10 -3 2 10 0 -8 9 -4 -5 9 4 时,输出的第一行为( )。
    A. 13
    B. 17
    C. 24
    D. 12

  1. 1. A. 

    正确

     B. 

    错误

  2. 2. A. 

    正确

     B. 

    错误

  3. 3. A. 

    正确

     B. 

    错误

  4. 4. A. 

    O(log⁡ n)O(log n)

     B. 

    O(n)O(n)

     C. 

    O(nlog⁡ n)O(nlog n)

     D. 

    O(n2)O(n2)

  5. 5. A. 

    O(log⁡ n)O(log n)

     B. 

    O(n)O(n)

     C. 

    O(nlog⁡ n)O(nlog n)

     D. 

    O(n2)O(n2)

  6. 6. A. 

    13

     B. 

    17

     C. 

    24

     D. 

    12


本题共 13.5 分

第 18 题

(3)

 

 假设输入总是合法的(一个整数和一个不含空白字符的字符串,用空格隔开),完成下面的判断题和单选题:

判断题
  1. 程序总是先输出 一行 一个整数,再输出 一行 一个字符串。( )

  2. 对于任意不含空白字符的字符串 str1,先执行程序输入0 str1,得到输出的第二行记为 str2 再执行程序输入1 str2,输出的第二行必为 str1。( )

  3. 当输入为1 SGVsbG93b3JsZA==时,输出的第二行为HelloWorld。( )

单选题
  1. 设输入字符串长度为 nn,encode 函数的时间复杂度为( )。
    A. O(n)O(n​)
    B. O(n)O(n)
    C. O(nlog⁡n)O(nlogn)
    D. O(n2)O(n2)

  2. 输出的第一行为( )。
    A. 0xff
    B. 255
    C. 0xFF
    D. -1

  3. (4 分) 当输入为 0 CSP2021csp 时,输出的第二行为( )。
    A. Q1NQMjAyMWNzcAv=
    B. Q1NQMjAyMGNzcA==
    C. Q1NQMjAyMGNzcAv=
    D. Q1NQMjAyMWNzcA==

  1. 1. A. 

    正确

     B. 

    错误

  2. 2. A. 

    正确

     B. 

    错误

  3. 3. A. 

    正确

     B. 

    错误

  4. 4. A. 

    O(n)O(n​)

     B. 

    O(n)O(n)

     C. 

    O(nlog⁡n)O(nlogn)

     D. 

    O(n2)O(n2)

  5. 5. A. 

    0xff

     B. 

    255

     C. 

    0xFF

     D. 

    -1

  6. 6. A. 

    Q1NQMjAyMWNzcAv=

     B. 

    Q1NQMjAyMGNzcA==

     C. 

    Q1NQMjAyMGNzcAv=

     D. 

    Q1NQMjAyMWNzcA==


本题共 14.5 分

第 19 题

三、完善程序(单选题,每小题 3 分,共计 30 分)

(1) (魔法数字) 小 H 的魔法数字是 44。给定 nn, 他希望用若干个 44 进行若干次加法、减法和整除运算得到 nn。但由于小 H 计算能力有限,计算过程中只能出现不超过 M=10000M=10000 的正整数。求至少可能用到多少个 44。

例如,当 n=2n=2 时,有 2=4+442=44+4​,用到了 33 个 44,是最优方案。

试补全程序。 

 

  1. ①处应填( )
    A. F[4] = 0
    B. F[1] = 4
    C. F[1] = 2
    D. F[4] = 1

  2. ②处应填( )
    A. !Vis[n]
    B. r < n
    C. F[M] == INT_MAX
    D. F[n] == INT_MAX

  3. ③处应填( )
    A. F[i] == r
    B. !Vis[i] && F[i] == r
    C. F[i] < F[x]
    D. !Vis[i] && F[i] < F[x]

  4. ④处应填( )
    A. F[i] < F[x]
    B. F[i]<=r
    C. Vis[i]
    D. i <= x

  1. 1. A. 

    F[4] = 0

     B. 

    F[1] = 4

     C. 

    F[1] = 2

     D. 

    F[4] = 1

  2. 2. A. 

    !Vis[n]

     B. 

    r < n

     C. 

    F[M] == INT_MAX

     D. 

    F[n] == INT_MAX

  3. 3. A. 

    F[i] == r

     B. 

    !Vis[i] && F[i] == r

     C. 

    F[i] < F[x]

     D. 

    !Vis[i] && F[i] < F[x]

  4. 4. A. 

    F[i] < F[x]

     B. 

    F[i]<=r

     C. 

    Vis[i]

     D. 

    i <= x


本题共 12 分

第 20 题

(2) ( RMQ 区间最值问题) 给定序列 a0,⋯,an−1,a0​,⋯,an−1​, mm 次询问,每次询问给定 l,rl,r,求 max⁡{al, ...,ar}max{al​, ...,ar​}。

为了解决该问题,有一个算法叫 the Method of Four Russians ,其时间复杂度为 O(n+m)O(n+m) ,步骤如下:

  • 建立 Cartesian(笛卡尔)树,将问题转化为树上的 LCA(最近公共祖先)问题。

  • 对于 LCA 问题,可以考虑其 Euler 序(即按照 DFS 过程,经过所有点,环游回根的序列),即求 Euler 序列上两点间一个新的 RMQ 问题。

  • 注意新的问题为 ±1±1 RMQ,即相邻两点的深度差一定为 11。

下面解决这个 ±1±1 RMQ 问题,“序列”指 Euler 序列:

  • 设 tt 为 Euler 序列长度。取 b=⌈log⁡2t2⌉b=⌈2log2​t​⌉ 将序列每 bb 个分为一大块, 使用 ST 表(倍增表)处理大块间的 RMQ 问题,复杂度 O(tblog⁡t)=O(n)O(bt​logt)=O(n)。

  • (重点) 对于一个块内的 RMQ 问题,也需要 O(1)O(1) 的算法。由于差分数组 2b−12b−1 种,可以预处理出所有情况下的最值位置,预处理复杂度 O(b2b)O(b2b),不超过 O(n)O(n)。

  • 最终,对于一个查询,可以转化为中间整的大块的 RMQ 问题,以及两端块内的 RMQ 问题。

试补全程序。

 

 

 

  1. ①处应填( )
    A. p->son[0] = S[top--]
    B. p->son[1] = S[top--]
    C. S[top--]->son[0] = p
    D. S[top--]->son[1] = p

  2. ②处应填( )
    A. p->son[0] = S[top]
    B. p->son[1] = S[top]
    C. S[top]->son[0] = p
    D. S[top]->son[1] = p

  3. ③处应填( )
    A. x->dep < y->dep
    B. x < y
    C. x->dep > y->dep
    D. x->val < y->val

  4. ④处应填( )
    A. A[i * b + j - 1] == A[i * b + j]->son[0]
    B. A[i * b + j]->val < A[i * b + j - 1]->val
    C. A[i * b + j] == A[i * b + j - 1]->son[1]
    D. A[i * b + j]->dep < A[i * b + j - 1]->dep

  5. ⑤处应填( )
    A. v += (S >> i & 1) ? -1 : 1
    B. v += (S >> i & 1) ? 1 : -1
    C. v += (S >> (i - 1) & 1) ? 1 : -1
    D. v += (S >> (i - 1) & 1) ? -1 : 1

  6. ⑥处应填( )
    A. (Dif[p] >> (r - p * b)) & ((1 << (r - l)) - 1)
    B. Dif[p]
    C. (Dif[p] >> (l - p * b)) & ((1 << (r - l)) - 1)
    D. (Dif[p] >> ((p + 1) * b - r)) & ((1 << (r - l + 1)) - 1)

  1. 1. A. 

    p->son[0] = S[top--]

     B. 

    p->son[1] = S[top--]

     C. 

    S[top--]->son[0] = p

     D. 

    S[top--]->son[1] = p

  2. 2. A. 

    p->son[0] = S[top]

     B. 

    p->son[1] = S[top]

     C. 

    S[top]->son[0] = p

     D. 

    S[top]->son[1] = p

  3. 3. A. 

    x->dep < y->dep

     B. 

    x < y

     C. 

    x->dep > y->dep

     D. 

    x->val < y->val

  4. 4. A. 

    A[i * b + j - 1] == A[i * b + j]->son[0]

     B. 

    A[i * b + j]->val < A[i * b + j - 1]->val

     C. 

    A[i * b + j] == A[i * b + j - 1]->son[1]

     D. 

    A[i * b + j]->dep < A[i * b + j - 1]->dep

  5. 5. A. 

    v += (S >> i & 1) ? -1 : 1

     B. 

    v += (S >> i & 1) ? 1 : -1

     C. 

    v += (S >> (i - 1) & 1) ? 1 : -1

     D. 

    v += (S >> (i - 1) & 1) ? -1 : 1

  6. 6. A. 

    (Dif[p] >> (r - p * b)) & ((1 << (r - l)) - 1)

     B. 

    Dif[p]

     C. 

    (Dif[p] >> (l - p * b)) & ((1 << (r - l)) - 1)

     D. 

    (Dif[p] >> ((p + 1) * b - r)) & ((1 << (r - l + 1)) - 1)


本题共 18 分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值