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中找到正確答案。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM