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。




 


解析

  本题设计了一种特殊的字符串加密规则,称为base64加密法则。函数encode是加密,decode是解密。init函数的功能把0~25加密成大写字母A ~ Z , 26 ~ 51加密成小写字母a ~ z,52 ~ 61加密成数字0~9。62为字符‘+’,63为字符‘/’。

第28题,错误。加密后的字符只能是init函数中的64种字符,而解密的字符串可以包含字符,如果解密成了回车符,就不止一行了。例如,将字符串"QQpC"进行解密,其结果是"A\nB",\n表示换行,这样就解密成两行输出。

第29题,正确。注意,因为输入方式是cin>>str,所以题目加了条件,不含空白字符(空格符,回车符,换行符等)。有了这样的前提,那么加密解密的操作应该是互逆的。

第30题,错误。手推就可以,这题没别的办法,只能耐心手推,结果是Helloworld,错在w应该是小写,而不是大写。

第31题,选B。encode函数就一个for循环,所以应该是\(O(n)\)

第32题,选D。众所周知,char类型只占用一个字节,故11111111是-1的补码表示。第15行初始化位0xff,table[0]在程序中没有改变。

第33题,选D。0表示encode,CSP2021csp模3得1,故有两个==号,排除A和C。然后手推就能在B和D中找到正确答案。


posted @ 2021-10-18 22:50  蒟蒻教练  阅读(5326)  评论(0编辑  收藏  举报