2020洛谷初賽模擬
78分,有點不是很理想。和去年的成績相差無幾,但是貌似和去年難度相當啊。今年的初賽只選拔200人而不像去年那樣水,我有點點危險……
以下是訂正
1、運行次數判斷
10.在一個初始長度為n的鏈表中連續進行k次操作,每次操作是讀入兩個數字aj和bj,在鏈表中找到元素為aj的結點(假設一定可以找到),然后將bj這個元素插入到這個結點前面。在最理想的情況下,鏈表訪問的結點數量最少可能是多少(不算將要插入的結點)?
A.n次
B.k次
C.nk次
D.n+k 次
注意這里是“最理想的情況”,而不是“平均情況”。
如果問的是平均要多少次,那當然是O(nk)
但是這里是“最理想”,所以就可以任意構造這個初始鏈表。假設aj就是鏈表的第一個元素即可。
2、組合數
A班有5名風紀委員,B班有4名風紀委員,C班有3名風紀委員。現在需要這些同學中選取6名風紀委員巡邏,如果只關注各班派出的風紀委員人數,有幾種不同的方案?
A.9
B.12
C.15
D.18
考場上遇到這種題,看到數據還算小的話還是手推一下吧!
這次我就直接pass了………………
其實很easy的
1 501 2 510 3 411 4 420 5 402 6 312 7 321 8 330 9 303 10 240 11 231 12 222 13 213 14 141 15 132 16 123 17 042 18 033
over
3、圖論基礎
14.一個7個頂點的完全圖需要至少刪掉多少條邊才能變為森林?
A.16
B.21
C.15
D.6
先下定義:
圖:由點和邊構成,可以連通也可以不連通
完全圖:點兩兩之間都有直接的邊的圖,m=n*(n-1)/2
連通圖:每兩個點之間都是連通的(直接或者間接有路徑可以到達)
樹:最基礎的連通圖,m=n-1
森林:至少一棵樹的圖(一棵樹也是森林!)
所以,就是從一個n=7->m=6*7/2=21的圖變成了一個n=7->m=6的樹,over
4、雖然這題沒錯但是我還是想記錄一下
5.在一個長度為n的數組中找到第k大的數字,平均的算法時間復雜度最低的是:
A.O(n)
B.O(nk)
C.O(nlogn)
D.O(n^2)
其實每個選項都對應了一種做法,我們倒着講:
假設原數組是a[1...n]
D:使用o(n^2)的排序,比如冒泡排序,然后輸出a[k]即可
C:使用o(nlogn)的排序,比如sort(),然后同上
B:兩層循環,依次找出1st,2nd,2rd,4th...(k-1)th,kth大的數即可
A:利用快排的思想,每次在目標的區間內選一個數i,然后把比a[i]小的都放在其左,比a[i]大的都放在其右。判斷a[i]在這一次后的位置與k的大小關系,然后選擇k所在的那個區間重復進行。時間復雜度:n+n/2+n/4+n/8+.......=2n=O(n)
可以直接用algorithm里面的函數nth_element(a.begin(),a.begin+k,a.end(),<cmp>)才不告訴你呢!
OVER