ISIJ2020 不知道算不算游記


由於 CSP 的暴力分太高,我來了這里。
轉發自 PKUWC 2020 游記

Day -53

要是不是別人說我進了,我還真沒注意到。

居然混進了代表隊 1,當然現在的水平遠遠沒有代表隊 1 的水平了。

為啥 zjr 沒報名啊,隊爺是他才對啊(

Day -45(模擬賽 1)

開場先把 T1,T2 碼了。

然后低智商選手的事實就暴露出來了。

全世界都會 T3,自閉了。(我也不知道我會不會,但最后也沒調出來)

upd:為什么有人用三分過了 T3,我就得掛,是不是我太菜了 /kk(弄得我以為三分是假的

后來我想的是個枚舉中位數,然后做個兩個分段一次函數的和,然后求最值,然而細節巨多,就暴斃了……

upd2:我把一個 [-2e9,2e9] 的數減了一個 [-2e9,2e9] 的數,成功爆 int 了。這么惡心的嗎……

upd3:T4 的計分修了,勉強卡上了 300 分,然而還是丟臉 /dk

upd4:26 個人打了,我 rk10,308 分,果然是遠遠不到一隊水平了。

這里放個簡要題解(沒有題意,別想了)

T1:簡單貪心,三個數都盡可能靠近 \(\frac{n}{3}\) 即可。

T2:簡單數位 dp,\(f_{i,j,0/1}\) 表示填了前 \(i\) 位,上一個填了 \(j\),目前這個數是否頂到上界。

T3:

比較長,折起來了

\(a\) 的前兩個數為 \(x,y\),那么是 \(x,y,y-x,-x,-y,x-y\) 的六個一循環。把模 6 為 0,4,5 的 \(i\)\(b_i\) 取反,就可以看成是 \(x,y,y-x\) 這樣循環。
貢獻大概可以寫成 \(\sum |a_i-x|+\sum |b_i-y|+\sum |c_i-(y-x)|=\sum |a_i-x|+\sum |b_i-y|+\sum |(c_i+x)-y|\).
假如我們枚舉了 \(x\),那么 \(y\) 的最優值是個小學數學。對這些數排序可以做到預處理 \(O(n\log n)\),單次只需要歸並的 \(O(n)\)
發現這個關於 \(x\) 是凸的,三分即可。
順便證一下凸性:
首先,當 \(x\) 增大時,大於 \(x\)\(a_i\) 的個數變多,所以這一塊關於 \(x\) 斜率遞增。
第二部分可以看成所有 \(c\) 向右不斷平移,所以 \(b_i\)\(c_i+x\) 的中位數會不斷變大,同時大於中位數的 \(c_i+x\) 的個數會變多。這一塊的斜率關於 \(x\) 也遞增。
所以整個關於 \(x\) 的斜率遞增。

T4:

比較長,折起來了

首先有個顯然的 \(O(na^2)\) 的 dp 做法。
\(f_i\) 表示目前的體積是 \(i\),只考慮體積填到 \(i\) 之后的操作的花費的話的最大價值。從大到小枚舉 \(i\),轉移枚舉用哪個實驗。

\[f_i=\max_{j=1}^n\min_{k=i+l_j}^{i+r_j}(f_k-c_j) \]

\(n\) 個單調隊列可以做到時空復雜度 \(O(na)\),恭喜點名被卡。(聽說用 deque 就能艹過去???)
我們時時刻刻維護一個 \(mn_r\),表示 \([i,r]\)\(r\) 的最大值。這時轉移到 \(f_{i-l_j}\),應該從 \(mn_{i-l_j+r_j}\) 轉移到。
那么怎么維護 \(mn\) 呢?維護一個從棧頂到棧底單調遞減的單調棧。每次壓入一個數,如果比棧頂小,用並查集把棧頂的父親設成自己。
時間復雜度 \(O(na\mathrm{DSU}(a))\),空間復雜度 \(O(a)\),實際表現十分優秀。

Day -38(Code+ 7)

全體 ISIJ 選手都要來打,我也不知道為什么(

對自己太有自信了,報了難的那組。

然后不知道跟什么一樣,爆零了。

太丟臉了,不想寫了。

Day -31(模擬賽 2)

開場還是碼了 T1。T2 一眼不會,T3 一看是個板子?

去寫 T3,然后掛了。撐死 90 上不去了,剩下兩個點 MLE。

滾回去 T2。好像可以用個套路……

碼完接着搞 T3,把各種東西換成 short,然而分數完全沒變。自閉了。

最后半小時會了 T4(還不知道真不真),最后沒調出來。

rk11,比上次還丟臉。

upd:好了,我的 T4 是假的 /cy

那最后沒調出來也沒那么難受了

個鬼啊,說不定能多騙點分

簡要題解:

T1:\(nxt_i\) 表示 \(i\) 后面第一個比 \(i\) 高的位置。離線,按詢問高度排序,每次把比這個高度小的建築加進去,加的時候進行 \([i,nxt_i-1]\) 區間加一,然后全局最大值。

T2:要用到一個套路性質:非負權邊樹上,\(v\) 為離點 \(u\) 最遠的點。那么 \(v\) 一定是某條直徑的某個端點。那么倒過來,維護每個聯通塊的直徑,合並就六種情況。

T3:真的完全是線段樹分治裸題。但是怎么掛的我也不知道……

T4:二分一波。從左往右掃描線,對於一條豎線上的每個點,以它為右上角的矩形中有點,等價於它后面一段長 \(h-1\) 區間中,最大的縱坐標與當前掃到的縱坐標差不超過 \(w-1\)。那么加入一個點就區間取 min,判斷就全局 min。(看起來很 trivial,然而我為什么會沒想到……)

Day ???

不是很想更,咕着。

以后無聊了再來更。

Day 10

似乎又墊底了,開心。

搞 whk 去了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM