2020年 CSP-S 第一轮初赛真题

认证时间:2020年10月11日 满分:30分(每题2分,共15题)
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
您的姓名:
1.请选出以下最大的数().
2.操作系统的功能是().
3.现有一段8分钟的视频文件,它的播放速度是每秒24帧图像,每帧图像是一幅分辨率为2048×1024像素的32位真彩色图像。请问要存储这段原始无压缩视频,需要多大的存储空间().
4.今有一空栈S,对下列待进栈的数据元素序列a,b,c,d,e,f依次进行:进栈,进栈,出栈,进栈,进栈,进栈的操作,则此操作完成后,栈底元素为().
5.将(2,7,10,18)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数h(x)=( )将不会产生冲突,其中a mod b表示a除以b的余数().
6.下列哪些问题不能用贪心法精确求解().
7.具有n个顶点、e条边的图采用邻接表存储结构,进行深度优先遍历运算的时间复杂度为().
8.二分图是指能将顶点划分成两个部分,每一部分内的顶点间没有边相连的简单无向图。那么,24个顶点的二分图至多有( )条边().
9.广度优先搜索时,一定需要用到的数据结构是().
10.一个班学生分组做游戏,如果每组三人就多两人,每组五人就多三人,每组七人就多四人,问这个班的学生人数n在以下哪个区间?已知n<60().
11.小明想通过走楼梯锻炼身体,假设从第1层走到第2层消耗10卡热量,接着从第2层走到第3层消耗20卡热量,依此类推,从第k层走到第k+1层消耗10k卡热量(k>1)。如果从1层开始连续向上爬消耗1000卡热量,至少要爬到第几层楼().
12.表达式 a*(b+c)-d 的后缀表达形式为().
13.从一个4×4的棋盘中选取不在同一行也不在同一列上的两个方格,共有( )种方法().
14.对一个n个顶点、m条边的带权有向简单图用Dijkstra算法计算单源最短路时,如果不使用堆或其它优先队列进行优化,则其时间复杂度为().
15.1948年,( )将热力学中的熵引入信息通信领域,标志着信息论研究的开端().
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填v,错误填x;除特殊说明外,判断题1.5分,选择题3分,共计40分)
1)

假设输入的n和d[i]都是不超过10000的正整数,完成下面的判断题和单选题:
16. n必须小于1000,否则程序可能会发生运行错误().
17. 输出一定大于等于0().
18. 若将第13行的“j=0”改为“j=i+1”,程序输出可能会改变().
19. 将第14行的“d[i] < d[j]" 改为 “d[i] != d[j]” ,程序输出不会改变().
20. 若输入n为100,且输出为127,则输入的d[i]中不可能有().
21. 若输出的数大于0,则下列说法正确的是().
2)
假设输入的n,k和d[i]都是不超过10000的正整数,且k不超过n,并假设rand()函数产生的是均匀的随机数,完成下面的判断题和单选题:
22. 第9行的“x”的数值范围是L+1到R,即[L+1, R]()
23. 将第19行的“d[a]”改为“d[b]”,程序不会发生运行错误().
24. 当输入的d[i]是严格单调递增序列时,第17行的“swap”平均执行次数是(争议题,无合适选项 ).
25. 当输入的d[i]是严格单调递减序列时,第17行的“swap”平均执行次数是().
26. 若输入的d[i]为i,程序①平均时间复杂度和②最坏时间复杂度分别是().
27.【程序2】若输入的d[i]都为同一个数,此程序平均的时间复杂度是().
3)


28. 输出可能为0().
29. 若两个字符串长度均为101,则m=0时的输出与m=100时的输出一样().
30. 若两个字符串长度均为n,最坏情况下此程序的时间复杂度为O(n!)().
31. 第一个字符串由100个不同字符构成,第二个是其倒序,m=0,则输出为().
32. 已知输入“0123\n3210\n1”输出4,当输入“012345\n543210\n1”输出14,当输入“01234567\n76543210\n1”输出28,则输入“0123456789ab\nba9876543210\n1”输出为().其中“\n"为换行符。
33. (4分)若两个字符串的长度均为n,且0<m<n-1,且两个字符串的构成相同(即任何一个字符在两个字符串中出现的次数均相同),则下列说法正确的是()。提示:考虑输入与输出有多少对字符前后顺序不
一样。
三、完善程序(单选题,每小题3分,共计30分)
1)(分数背包)小S有n块蛋糕,编号从1到n。第i块蛋糕的价值是wi,体积是v。他有一个大小为B的盒子来装这些蛋糕,也就是说装入盒子的
蛋糕的体积总和不能超过B。他打算选择一些蛋糕装入盒子,他希望盒子里装的蛋糕的价值之和尽量大。为了使盒子里的蛋糕价值之和更大,他可以任意切割蛋糕。具体来说,他可以选择一个a(0<a<1),并将一块价值是w,体积为v的蛋糕切割成两块,其中一块的价值是a.w,体积是a.v,另一块的价值是(1一a)·w,体积是(1一a)·v。他可以重复无限次切割操作。
现要求编程输出最大可能的价值,以分数的形式输出。比如n=3,B=8,三块蛋糕的价值分别是4、4、2,体积分别是5、3、2。那么最优的方案就是将体积为5的蛋糕切成两份,一份体积是3,价值是2.4,另一份体积是2,价值是1.6,然后把体积是3的那部分和后两块蛋糕打包进盒子。最优的价值之和是8.4,故程序输出42/5。
输入的数据范围为:1≤n≤1000,1≤B≤105;1≤wi,v1≤100。
提示:将所有的蛋糕按照性价比w;/v;从大到小排序后进行贪心选择。
试补全程序。
34. ①处应填().
35. ②处应填( ).
36. ③处应填().
37. ④处应填().
38. ⑤处应填( ).
2)

最优子序列)取 m = 16,给出长度为n的整数序列a₁, a₂, ⋯, aₙ(0 ≤ aᵢ < 2ᵐ)。对于一个二进制数x,定义其分值w(x)为x + popcnt(x),其中popcnt(x)表示 x 二进制表示中 1 的个数。对于一个子序列b₁, b₂, ⋯, bₖ,定义其子序列分值S为w(b₁ ⊕ b₂) + w(b₂ ⊕ b₃) + w(b₃ ⊕ b₄) + ⋯ + w(bₖ₋₁ ⊕ bₖ)。其中⊕表示按位异或。对于空子序列,规定其子序列分值为0。求一个子序列使得其子序列分值最大,输出这个最大值。

输入第一行包含一个整数 n(1 ≤ n ≤ 40000)。接下来一行包含n个整数a₁, a₂, ⋯, aₙ。

提示:考虑优化朴素的动态规划算法,将前m/2位和后m/2位分开计算。

Max[x][y] 表示当前的子序列下一个位置的高 8 位是 x、最后一个位置的低 8 位是 y 时的最大价值。

试补全程序。


39. ①处应填().
40. ②处应填().
41. ③处应填().
42. ④处应填().
43. ⑤处应填().
更多问卷 复制此问卷