CSP-S 2021 初赛解析
一、单项选择
解析
1.选A,ls列出目录,cd是定位目录,cp是复制问卷,all只有作为命令的参数使用
2.选B,
00101010 | |
---|---|
+ | 00010110 |
01000000 |
3.选A,递归函数的参数和局部变量存储在系统栈,如果层数过多,栈就会溢出。
解析
4.选C,排序稳不稳定看相等值得元素排序后得相对位置有没有变化,因此元素之间得比较只要是相邻的,排序就是稳定的,而堆排序元素的比较跨度很大。
5.选C
- a1与a2比,消耗比较次数1次,不妨令a1>=a2
- 剩下的2n-2个数,两两比较,消耗次数n-1次,产生n-1个更大的数,n-1个更小的数
- a1与剩下的n-1个更大的数依次比较,消耗次数n-1次
- a2与剩下的n-1个更小的数依次比较,消耗次数n-1次
- 总的消耗次数\(S=1+(n-1)+(n-1)+(n-1)=3n-2\)
6.选C
初始哈希表如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|
\(h[0]=0,h[1]=1,h[2]=4,h[3]=9,h[4]=5,h[5]=3\),哈希表如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|
\(h[6]==3——>h[6]=4-->h[6]=5-->h[6]==6\),哈希表如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|
\(h[7]=5-->h[7]=6-->h[7]=7\)
7.选C
不考虑题目限制的不连通状态,e=36,则至少需要的点数n满足完全图,\(e=\frac {n(n-1)}{2}-->n=9\),因为题目要求不连通状态,所以再加一个孤立的点。
解析
8.选B
令二叉树的高度位h,题意求最少的高度,要满足趋于满二叉树的状态;满二叉树的情况下其结点个数\(n=2^h-1\), 选项A,\(2^{10}-1=1023\),排除,选项B,\(2^{11}-1=2047\),只需最后一层减掉26个节点就可以满足.
9.选D
如果树上某个结点A存在左子树B和右子树C,那么在前序遍历的顺序是A-B-C,中序遍历则是B-A-C,显然,把B去掉两个序列相同。
10.选A
类似冒泡排序求逆序对,存在7个逆序对
解析
11.选A
\(solve(23,23)\) <-- \(5*solve(22,23)\bmod n\) <-- \(5^{2}*solve(21,23)\bmod n\) <-- ... \(5^{22}*solve(1,23) \bmod n\)
根据费马小定理:
\(a^p \bmod p=a \bmod p\) (p为质数)
\(a^{p-1} \bmod p=1 \bmod p=1\) (p为质数)
\(5^{22} \bmod 23=1 \bmod 23=1\)
12.选C
\(T(n)=T(n−1)+T(n−2)\) ,所以复杂度是 \(O(Fn)\) 。
或者说是 \(2^n\) ,因为每一项都是 \(Fn=Fn−1+Fn−2\) 。
13.选C
- 挑1个:\(C_8^1=8\)
- 挑2个:\(C_7^2=21\)(插空法,拿掉两个苹果剩余7个空位)
- 挑3个:\(C_6^3=20\)(插空法)
- 挑4个:\(C_5^4=5\)(插空法)
- 挑5个:不满足条件
\(ans=8+21+20+5=54\)
14.选C
满足三角形的条件是任意两边之和大于第三条边。
根据上面的定理,依次枚举a=b的情况c可能的个数:
- a b c的个数
- 1 1 1个
- 2 2 3个
- 3 3 5个
- 4 4 7个
- 5 5 9个
- 6 6 9个(a,b,c均为1~9的整数,故最多9个)
- 7 7 9个
- 8 8 9个
- 9 9 9个
\(N=1+3+5+7+9*6=61\)
考虑等腰三角形有以下三种状态,\(aab,aba,baa\),则\(N=61*3=183\)
再考虑等边三角形重复计算的情况,\(N=183-9*2=165\)
15.选B
没有副权,考虑模拟dijkstra算法,可得最短路径为19,具体过程如下:
二、阅读程序
解析
首先先看一下程序,通过求 t 可以猜出这是三维坐标系。还有 r 可以大致猜测是球。因为\(cos60=0.5\) ,而60度在弧度制下就是 \(\frac {π}{3}\)。可以猜测一下,因为 \(V=\frac {4}{3}πr^3\) , \(r\)是\(\frac {π}{3}\) ,所以本题和球关系很大,而 d 是半径。
第16题,正确。第21行,t右边的表达式计算结果是int,把int赋值给double,不会影响。
第17题,错误。如果替换成\(/ 2 /sqrt(t)\),第一步除以2的操作将变成整除,会丢失精度。
第18题,错误。通过第10、11行代码,sq、cu函数的参数是int型,而26~27行的x、y是double型。调用函数的过程中会丢失精度。
第19题,正确,手动模拟,这个不会难算。结果为 \(\frac {5π}{12}\)。
第20题,选D,手动模拟,带入计算可得
第21题,选C,第24行代码,出现输出0的情况,可以判断是体积交。
解析
本题的任务是采用分治法求最大子段和。一个长度为\(n\)的完整数组的最大子段和有三种可能性,这个子段全部都在\([1,n/2]\)里面、全部都在\([n/2+1,n]\)里面、子段经过了区间的中点。那么前两种情况可以递归求解,对于第三种情况,其实就是[1,n/2]中最大的后缀和再加上[n/2+1,n]中最大的前缀和。
而solve 1函数返回的结构体四个参数描述了函数对应区间的数值特征,分别代表:
-
h此区间最大的前缀和(可以为空)
-
j此区间最大的子段和(可以为空)
-
m此区间最大的后缀和(可以为空)
-
w此区间所有元素的总和。
solve 2函数则直接通过循环计算当前区间“经过中点”的最大的子段和,再与递归计算的前两种方案求最大值,就是当前区间的最大子段和。
第22题,正确。这是两种不同的算法求最大子段和,所以结果是一样的。
第23题,错误。考虑二分到最边界,此时 \([n,n+1]\) 会分成 \([n,n]\) 和 \([n+1,n+1]\) ,相等情况被特判走了,所以不会走那两行特判。但若开头输入的 \(n\leq0\) ,也只会分别执行一次。
第24题,错误。注意第一个5是表示n个数!剩下的5个数最大字段和是11
第25题,选B。\(T(n)=2T \left( \dfrac{n}{2} \right) + 1\);\(T(n)=2n-1\)
第26题,选C。\(T(n)=2T \left( \dfrac{n}{2} \right) + n\);所以复杂度是\(O(n\log n)\)
第27题,选B。注意第一个数10表示n。剩下的10个数-3 2 10 0 -8 9 -4 -5 9 4的最大子段和是17。