#4830. 2019年CSP-S 初赛试题

一、单选题(共15题,每题2分,共计30分;每题有且只有一个正确选项。)

  1. 若有定义:int a=7; float x=2.5, y=4.7,则表达式 x+a%3*(int) (x+y)%2 的值是:()
  1. 下列属于图像文件格式的有()
  1. 二进制数 11 1011 1001 0111\text{11 1011 1001 0111}01 0110 1110 1011\text{01 0110 1110 1011} 进行逻辑或运算的结果是()。
  1. 编译器的功能是()
  1. 设变量 xx 为 float 型且已赋值,则以下语句中能将 xx 中的数值保留到小数点后两位,并将第三位四舍五入的是()
  1. 由数字 1,1,2,4,8,81, 1, 2, 4, 8, 8 所组成的不同的 44 位数的个数是()。
  1. 排序的算法很多,若按排序的稳定性和不稳定性分类,则()是不稳定排序。
  1. GG 是一个非连通无向图(没有重边和自环),共有 2828 条边,则该图至少有 ()个顶点。
  1. 一些数字可以颠倒过来看,例如 0,1,80,1,8 颠倒过来还是本身,66 颠倒过来是 99,99 颠倒过来看还是 66,其他数字颠倒过来都不构成数字。类似的,一些多位数也可以颠倒过来看,比如 106106 颠倒过来是 901901。假设某个城市的车牌只有 55 位数字,每一位都可以取 0099。请问这个城市有多少个车牌倒过来恰好还是原来的车牌,并且车牌上的 55 位数能被 33 整除?()
  1. —次期末考试,某班有 1515 人数学得满分,有 1212 人语文得满分,并且有 44 人语、数都是满分,那么这个班至少有一门得满分的同学有多少人?()。
  1. AABB 是两个长为 nn 的有序数组,现在需要将 AABB 合并成一个排好序的数组,问任何以元素比较作为基本运算的归并算法,在最坏情况下至少要做多少次比较?()。
  1. 以下哪个结构可以用来存储图()
  1. 以下哪些算法不属于贪心算法?()
  1. 有一个等比数列,共有奇数项,其中第一项和最后一项分别是 22118098118098,中间一项是 486486,请问以下哪个数是可能的公比?()

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√错误填X;除特殊说明外,判断题 1.5 分,选择题 4分,共计 40 分) 1. 判断题 1)(1 分)第 16 行输出 ansans 时,ansans 的值一定大于 ii。()

2)(1 分)程序输出的 ansans 小于等于 nn。()

3)若将第 12 行的 < 改为 !=,程序输出的结果不会改变。()

4)当程序执行到第 16 行时,若 ansi>2ans - i> 2,则 a[i+1]a[i]a[i + 1] \leq a[i]。 ()

选择题

5)(3 分)若输入的 aa 数组是一个严格单调递增的数列, 此程序的时间复杂度()

6)最坏情况下,此程序的时间复杂度是()。

判断题

1)(1 分)输入的 aabb 值应在 [0,n1][0, n-1]的范围内。()

2)(1 分)第 16 行改成 fa[i] = 0;,不影响程序运行结果。()

3)若输入的 aabb 值均在 [0,n1][0, n-1] 的范围内,则对于任意 0i<n0\leq i<n 都有 0fa[i]<n0 \leq fa[i] <n ()

4)若输入的 aabb 值均在 [0,n1][0, n-1] 的范围内,则对于任意 0i<n0\leq i<n 都有 1cnt[i]n1 \leq cnt[i]\leq n ()

选择题

5)当 nn 等于5050时,若 a,ba,b 的值都在 [0,49][0,49] 的范围内,且在第 2525 行时 xx 总是不等于 yy,那么输出为()。

6)此程序的时间复杂度是()。

判断题

1)(1分)程序输出时,suf 数组满足:对任意 0i<slen,suf[i]suf[i+1]0 \leq i < slen, suf[i] \leq suf[i + 1]。 ()

2)(2分)当 ttss 的子序列时,输出一定不为 00。()

3)(2分)程序运行到第 2323 行时,ji1j - i - 1 一定不小于 00。()

4)(2分)当 ttss 的子序列时,pre 数组和 suf 数组满足:对任意 0i<slen,pre[i]>suf[i+1]+10 \leq i < slen, pre[i] > suf[i + 1] + 1。 ()

选择题

5)若 tlen=10,输出为 00,则 slen 最小为()。

6)若 tlen=10,输出为 22,则 slen 最小为()。

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

  1. (匠人的自我修养) 一个匠人决定要学习 nn 个新技术。要想成功学习一个新技术,他不仅要拥有一定的经验值,而且还必须要先学会若干个相关的技术。学会一个新技术之后,他的经验值会增加一个对应的值。给定每个技术的学习条件和习得后获得的经验值,给定他已有的经验值,请问他最多能学会多少个新技术。

输入第一行有两个数,分别为新技术个数 n(ln103)n(l\leq n\leq 10^3),以及己有经验值107(\le10^7)

接下来 nn 行。第 ii 行的两个正整数,分别表示学习第 ii 个技术所需的最低经验值107(\le10^7),以及学会第i个技术后可获得的经验值107)(\leq 10^7)

接下来 nn 行。第 ii 行的第一个数 mim_i 0mi<n(0\le m_i<n),表示第 ii 个技术的相关技术数量。紧跟着 mm 个两两不同的数,表示第 ii 个技术的相关技术编号。

输出最多能学会的新技术个数。

下面的程序以 O(n2)O(n^2)的时间复杂度完成这个问题,试补全程序。 ![](file://19.jpg) ![](file://19-1.jpg)

①处应填()

②处应填()

③处应填()

④处应填()

⑤处应填()

  1. (取石子) Alice 和 Bob 两个人在玩取石子游戏。他们制定了 nn 条取石子的规则,第 ii 条规则为:如果剩余石子的个数大于等于 a[i]a[i] 且大于等于 b[i]b[i],那么他们可以取走 b[i]b[i] 个石子。他们轮流取石子。如果轮到某个人取石子,而他无法按照任何规则取走石子,那么他就输了。一开始石子有 mm 个。请问先取石子的人是否有必胜的方法?

输入第一行有两个正整数,分别为规则个数 n(l<n<64)n(l<n<64), 以及石子个数 m(107)m( \le 10^7)

接下来 nn 行。第 ii 行有两个正整数 a[i]a[i]b[i]b[i](la[i]107,lb[i]64)(l \le a[i] \le 10^7,l \le b[i] \le 64)

如果先取石子的人必胜,那么输出 Win\texttt{Win},否则输出 Loss\texttt{Loss}

提示:

可以使用动态规划解决这个问题。由于 b[i]b[i] 不超过 6464 ,所以可以使用 6464 位无符号整数去压缩必要的状态。

status 是胜负状态的二进制压缩,trans 是状态转移的二进制压缩。

试补全程序。

代码说明:

~ 表示二进制补码运算符,它将每个二进制位的 00 变为 1111 变为 00;

而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位一一进行比较,若两个二进制位相同,则运算结果的对应二进制位为 00 ,反之为 11

ull 标识符表示它前面的数字是 unsigned long long 类型。

①处应填( )

②处应填( )

③处应填( )

④处应填( )

⑤处应填( )

参考答案(请提交答案后再看): 参考答案