1. 程式人生 > >【2016CCCC團體程式設計天梯賽決賽】總集吐槽篇

【2016CCCC團體程式設計天梯賽決賽】總集吐槽篇

天梯賽題目太多而且大多數都沒什麼難度所以就不一一拆出來說了。
乾脆就搞成一篇總集篇好了。
說是侃題解但其實就是吐槽而已。
模擬賽初賽決賽都是一個題型是什麼鬼啊Orz
在做決賽的時候感覺完全就是在做模擬賽三代目。
全場手速場,啊也就這種手速場我才能有點優勢吧。
(雖然不會盲打的我手速buff還是加不夠但是現場飈鍵盤的時候還是賊爽233)
中途還停電了是什麼鬼。。
果然鄙校來承辦廣州賽區還是有點吃力啊(笑
題目太多就不一一貼程式碼了,只做一些簡單的吐槽。

題目集連結
決賽的L1-1至L1-8對應練習集的L1-025至L1-032
決賽的L2-1至L2-4對應練習集的L2-013至L2-016
決賽的L3-1至L3-3對應練習集的L3-010至L3-012

L1-1 讀兩個字串然後判斷裡面有沒有非數字字元,如果有的話當然就不符合要求。然後再對符合要求的轉換成int型再判斷是否在題目所給的範圍內,如果超出範圍同樣不符合要求。最後加起來,符合要求的就輸出,不符合要求的就給個問號。
L1-2 簡單輸出。wodema這種題存在的意義到底是什麼= =
L1-3 先用一個數組裝下所有出現過的數字,然後降序排序,最後對原來的電話號碼挨個找index就行。注意輸出格式。
L1-4 開根號判斷,或者篩子,任君選擇。但顯然前者比較好寫。
L1-5 按他說的轉換就行了。注意保留小數點後1位。
L1-6 開一個vis陣列記錄是否已被配對,然後從前往後遍歷,對於每一個遍歷到的沒有配對過的學生,從後往前找沒有配對過的異性,然後配對輸出即可。
L1-7 第五題的進階版。但其實也是按他說的判斷就行。其實應該是沒有浮點數誤差的,如果發現有誤差了的話可以回過頭看看自己是不是有什麼變數定義成int了(別問我怎麼知道的,胃疼)。
L1-8 分兩種情況討論 原字串比最終需要生成的字串短的話就剪掉前面的多餘的部分,長的話就往前填充。

L2-1 對於每次失去城市dfs判斷連通塊的數量是否有變化即可。注意失去的城市本身就是孤立的話那連通塊本身就會少了一個的情況就行了。最後再掃一遍看看是不是全部城市都沒了。
L2-2 講道理其實就是nlogn求最長遞增子序列而已。題目的原意是求原序列拆成遞減子序列最少拆成多少個,但其實這個跟最長遞增子序列的長度是等效的。然而比賽的時候忘了nlogn求LIS的演算法,最後只能寫個n^2的LIS摸了幾分。So sad.
L2-3 放在L2但其實就是L1難度。對每個人進行單獨處理,對於每個人的分數,先進行排序,然後去掉最前面的分數和最後面的分數,然後再計算平均分,最後對所有的平均分進行一次排序並統計就行了。
L2-4 這題的標題簡直深得我心23333。只需對要判斷的兩個人判斷性別以及dfs其五代之內是否有重複ID就行。需要注意的是,當錄入資訊的時候,對於其父母同樣也要更新這個ID的性別資訊。

L3-1 用一個大小為2^20的堆來模擬這顆二叉搜尋樹就行了。用堆的話層次遍歷也比較方便。
L3-2 慣例的最短路問題。題意很顯然已經告訴你要寫個三關鍵字的可重複最短路並且需要記錄最短路徑了。那就照著他說的寫就可以了。由於需要記錄第一關鍵字與最短路徑相同的路徑數所以當演算法執行到找到最短路徑的時候不應該立刻停止而是要繼續下去直到迭代到的路徑的第一關鍵字發生變化為止。由於滿足條件的最短路徑數有可能會以不同的方式通過相同的點所以不應該判斷其是否有重複遍歷節點的情況,而是要讓它這樣重複遍歷下去(可能題目資料比較小不然這樣真的得爆炸)。
L3-3 慣例GG的題目。不過初步的想法是,要找出滿足條件的線段其實就等於要找出滿足條件的直線,如果找到滿足條件的直線的話那隻需擷取“足夠長”的線段就行了。那麼關於該直線,就可以考慮設其為y=kx+b(斜率不可能不存在,因為它需要切割豎直線)。那麼對於任意一條需要切割的豎直線段,都可以看成是對該直線方程中的k和b的約束條件,於是遍歷一遍之後就有了一系列的約束條件。那麼就跟解線性規劃問題一樣劃出k和b的可行域然後取適當的值就行了。嘛畢竟是初步思路還沒想好怎麼實現以及其正確性,大神們看著開心就行Orz

完畢,接下來將近一年可以不用碰這樣的題目了。