GCJ 2023 Farewell Round C

沒想到今年就是最後一年的 GCJ 了……

這最後一年也不是一個完整的賽事年,而是就簡單地在 4/15 平行開四個難度各有不同的回合做為 Farewell Round,就此告別大家了。根據 FAQ,這四個回合的難度分配是這樣子的:

考慮到我這幾年的 GCJ 大約都在 R2 落馬,Round B 若是約 GCJ R1 難度的話我應該相對輕鬆,所以決定這最後一次就以 Round C 作結吧。

……然後就發現好像咬太多了,最終成績是 24/100。那麼,這句話也是最後一次用在 GCJ:成績截圖以下有雷。

Q1. Game Sort: Part 1

理論上應該是沒什麼好說的啦,就找下一組裡大於等於上一組的最小字串,無法就 IMPOSSIBLE。只是我寫到 Q5 才發現 Q1 這個核心部份有 bug…

Q2. Immunization Operation

我的做法是用個 set 記下哪個位置有什麼操作 (拿 N 號疫苗跟給 N 號疫苗),然後在這上面走就好。比較麻煩一點點的是這個「在上面走」的意義:我設定指標指在某操作上表示機器人位置在前一位置 (含) 到此一位置 (不含) 的區間,這樣所有指標 (含 .end()) 就都對應到一段空間了,不過這就代表一些判斷的等號跟前一後一的細節就要很小心。

只是只走項目看起來時間還是不行的樣子……

Q3. Evolutionary Algorithms

這是個看起來很可怕的組合題。每一個點輪流當 B 點,這樣 A 點就在 B 下面取,C 點就在這之外的地方取,所以統計好每個子樹的分數數量之後就能拉出數量乘起來加進累加裡去。

只是看來點數太多記憶體爆了……

Q4. The Decades of Coding Competitions

這題……應該是 Floyd-Warshall 的變形。把計算最短路徑改成統計有哪些路徑顏色集合,再去看要問的題目哪些有奇數顏色種路徑。因為 Hard 測資有百色,應該是不太能直接記奇偶才對……只是果然多這一層迴圈時間就爆了。

Q5. Game Sort: Part 2

好的,這題賊到了一個極點。最難的問題是 P=3 的狀況,其次是 P=2,P >= 4 反而是最簡單的。

P >= 4 的狀況,如果在原字串裡找到了連續兩個字母前者大於後者,那我們總是能把這兩個字母個別切開;如果找不到,代表原字串本身就是非遞減排列,那這就無解。(EDIT: 然後被題解打臉了:我漏了一個狀況是 ...PPP... 切成 ... PP P ... 也行,剩下的才真的無解)

剩下來的狀況得要像 Q1 一樣找能組合出來的字串範圍,如果能找出前字串最小還比後字串大那就是解了。P=2 代表只要切一刀,那我們可以先求出所有的前綴最小跟後綴最大,逐一檢查過去就行了;但 P=3 想了老半天沒有想到有效率的做法,只弄了個半套起來 (還在中間發現了 Q1 那段核心的 bug),寫完只剩八分鐘只好就送,果然小測試就 WA。

小結

是不是應該去做 Round B 才對……?考慮到晚十這個時間我基本上應該不太可能非常專心,或許 Round B 可能才是正確的選擇。(而且確實過程中是不怎麼專心沒錯 (死

嘛,雖然我遲到 2020 才開始跟上 GCJ,大學時期在做 ICPC 那段時間的解題思路已經掉的差不多,不過至少曾經在 2020 衝進 R3 過,拿了一件 T 恤算是聊勝於無吧。至於未來……都已經上了這個年紀 (!) 了,就算參加類似的東西應該相對注重解題而非競速了吧。

那麼,未來有緣再見。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料