NPSC 2020 決賽

比賽前三天請了三天公假團練,不過星期三下午我跑去教育科技展玩所以沒練到 (X),星期四打得還不錯,星期五打到一半睡著 (??)。

題本.計分板.程式碼

題本官網還沒放,放程式碼的隨身碟好像不見了 OAO,等找到再放上來。

題目

pA

AC, penalty: 37, solved by WiwiHo, idea from joylintp

有一張 nn 個點的圖,任兩點最多共一個環,求最小著色數和著色方法。

其實就是給仙人掌,joy 聽完題目就想到除了 n=1n=1 答案是 1 外,答案一定是 2 或 3,然後我想了一下,既然把 BCC 縮點後是樹,那每個 BCC 的塗色方法不會互相影響塗色數,然後每個 BCC 都是一個環,所以就先用兩種顏色塗一圈後,最後一格不能塗就用第三種顏色。

這題有一個雷點就是 n=1n=1,有人的顏色是從 2 開始放,然後就爛掉了,我們有特判不過我也是從 1 開始放的。

還有就是這題首殺是 36 分鐘,我們差一分鐘 QQ。

pB

AC, penalty: 14, solved by shaun_0124

我沒看題目,好像很多人都沒看過題目 (?),有來的人都有過。

pC

AC, penalty: 21, solved by joylintp

我也沒看。

pD

給一張 nn 個點的有向圖,第 vv 個點的出度是 deg(v)deg(v),還有一個函數 f(x)f(x),如果現在在第 vv 個點上,要走第 ii 步,就要往這個點的第 f(i)moddeg(v)f(i) \bmod deg(v) 條邊(0-indexed)走,要走 TT 步,求每一步會到哪個點。 T1018T \leq 10^{18}

這題的困難點是 f(i)f(i) 算出來的數字會超大,而且每次都要模不同數字,我們就想到可以取一些度數的最小公倍數,這樣可以少模幾個,我們最後弄到剩 240 個模數,但壓常壓很久都沒過,據說有人弄到剩 40 個,emanlaicepsa 說有 30 個的作法但他沒寫。

pE

燒雞 by WiwiHo

給一個 11nn 的排列 p0p_0,還有 M1M-1 個排列,第 ii 個排列是把上一個排列的第 xix_iyiy_i 項交換,求字典序排序後的結果(輸出編號)。

我用的作法是把每一個排列當成一個時間點,每次交換其實是兩個單點修改,然後一開始把所有時間當成一段,接著看第一個位置在哪些時間被改變,如果被改變了,就把那個時間所在的那段切開,先找到同一段要被切的所有地方,切完後再把它們排序,再去看第二個位置,做一樣的事情。這個作法會假設同一段裡的排名都是連續的,但是如果有兩個不同的段的前綴一樣,這樣就可能會壞掉。好像燒雞的人都是這個解 (?)。

正解是一樣把每一個排列當成時間,交換當成兩個單點修改,然後弄一棵維護前綴 hash 的持久化線段樹,第 ii 個版本就是第 ii 個排列,比較字串時,在線段樹上二分搜兩個排列的最長共同前綴,這樣就可以用 O(logn)O(\log n) 的時間比較排列,總時間複雜度會是 O(nlog2n)O(n \log^2 n)

我完全沒往資料結構的方向想 QQ,以為這題有美麗的解法,結果沒有。

pF

AC, penalty: 41, solved by WiwiHo, idea from shaun_0124

nn 個點,你可以決定一個數字 TT,然後以每一個點為圓心作半徑 TT 的圓,求最多可以有幾個交點。

我看完題目發現是數學就先丟給隊友了,然後 shaun_0124 跟我說答案好像是 2C2n2C^n_2,我想了一下想到交點都會在兩個點的中垂線上,那麼如果有兩對圓的交點在同個地方,那一定是中垂線的交點,如果是同一條中垂線的話也不會是同一個點,TT 超級大的話就不會有交點一樣了。

pG

A={x  0x<224, xR}A=\{x\ |\ 0 \leq x < 2^{24},\ x \in \mathbb{R}\},給一個你不知道長怎樣的一一對應函數 f: AAf:\ A \to A,它的反函數是 gg,你可以詢問任意次 f(x)f(x),然後有 QQ 筆詢問,問你 g(x)g(x) 是多少。 強制在線,記憶體限制 8 MB。

算了算發現平均每個 xx 只能使用 0.5 B 的記憶體,然後就不會了。

pH

給一個數列 aa,然後有兩種詢問:

  1. 詢問一個區間 [l,r][l,r],你每次操作可以在這個區間裡選一個區間,然後反轉,求「相同的相鄰數字的對數」最少可以是多少,還有達到這個最少值至少需要多少次操作。
  2. 區間改值。

「相同的相鄰數字」的最少對數可以用眾數的出現次數算,然後我就不會了。官解有什麼戰鬥線段樹、Treap 什麼的東西,超噁。

結語

4 AC, penalty: 113, rank 6

很幸運地得獎了,前五名都做出來 5 題,剛好我們是 4 題裡面最快的。不過我還是覺得不太滿意,沒把 pE 做出來,我居然完全沒往資料結構的方向想 @@,如果有做出來的話,我們就是第二名了 QQ。

這次到第 19 名都做出了 4 題,我們在 41 分鐘就把 4 題做完了,所以後面四個小時都在燒雞。我中間有因為腦袋停止運作睡了一個小時,好像不太應該在比賽的時候睡覺,我的腦袋滿常停止運作的,大概就是一種腦袋在抗拒思考的感覺。