1. 程式人生 > 實用技巧 >APIO2020 遊記

APIO2020 遊記

一早上趕緊起來準備裝置 到了8:55進到騰訊會議發現筆記本的前置攝像頭bz了 趕緊換了另外一臺筆記本(所有的板子都沒了)

開場先把3題都看了一遍。。。感覺一題都不可做啊

T1

先看T1 不太明白那個 \(\sum f(i)^2 \le 400000\) 的意義何在

發現如果知道了對於哪些 \(y\) 存在合法的染色方案,那麼就可以直接進行dp,套一個單調佇列就是 \(O(n)\)

一開始寫了個set來存對於每一面牆,有哪些染色公司可以染它 然後暴力處理哪些 \(y\) 有合法染色方案

但是set實在是太慢了 只過了2,3兩個子任務

然後試圖換成bitset,開了bitset<100005> b[100005]

空間居然還沒有爆炸。。。不過還是跑的很慢 只過了2,3兩個點

然後發現直接用陣列存就好了 每次新加入一堵牆和刪除一堵牆時更新一下 這樣就過了前4個子任務

發現對於顏色一樣的牆,能染它們的染色公司也一樣,所以只用處理每種顏色有哪些公司能染 然後加了一些玄學剪枝就AC了。。。???

T2

T2第一眼看好像是和雙連通分量之類的東西有關,然後照著樣例試了下結論發現不太對。。。

然後感覺非常的不可做 看了下子任務,subtask1是鏈或環 subtask2是菊花圖。。。好像挺簡單?就是才13pts。。。

T3

所以就先去看T3了 作為一名只在CF做過互動題的選手,不太知道互動題該怎麼入手。。。

不過前兩個subtask還是比較簡單的,直接暴力詢問 \(n^2\)

次把整棵樹的結構問出來

然後就從樹的直徑的一端開始,每次找到樹上離當前點最遠的點作為下一個遊覽點,然後把它刪掉

然後subtask3是棵完全二叉樹,樹的結構已知,似乎可以口胡一下做法?

試了好幾個演算法都不對 最後寫+調了1h調出來了一個挺奇怪挺複雜的找fun路徑的一個演算法 時間複雜度是 \(O(nh)\) 的,其中 \(h\) 是樹高

顯然完全二叉樹的樹高是 \(\log n\) 所以我把這個點過了 加上前兩個子任務就是47pts 開心

然後看subtask4 好像意思是說樹有一個根並且點的編號就是dfs序?下面的另外兩個條件看不太懂 所以就棄了這題

T2

然後回頭把T2的前兩個subtask寫了 還被菊花圖卡了半天。。。

寫完發現自己就是個弱雞 T2什麼都想不出來

最後十分鐘想到一個每次刪一個點然後建最小生成樹的玄學演算法 一是不知道正確性 二是隻剩10分鐘了 所以就沒去寫了

最終得分100+13+47=160

最後吐槽一波 IOI賽制是真的香 要不是IOI賽制說不定我T3第3個子任務就交一個假演算法上去了

而且當場出成績這個必須好評