PKUWC2020? 退役記


PKUWC2020? 退役記

RT,暫時退役搞期末考了。

Day -inf

woc,發現自己能去 PKUWC,rp 好爆了。

woc,發現自己壓線能去 WC,rp 好爆了。

woc,發現自己 div2 的題都不會,而且一次不會就不會兩道,實力弱爆了。

然后就是頹廢頹廢頹廢。。。

Day 0

忘了學校蓋章。。。

住宿被搞了兩次。。。

rp 差爆了。。。

途中聽說 PKUWC 改 OI 賽制了,爆零預定

Day 1

早上兩個小時講課變成 40 分鍾了

去未名湖和博雅塔(一塌糊塗)玩了一下,再去西門拍了照。

真是頹廢

中午去睡了一覺,去考場一看

不愧是聽說,賽制是 IOI 賽制

沒有主地斗,可能有學上了

我在想桃子

t1 先想了一個矩乘,然后萎了

t2 暴力不會

t3 數論結構

暴力有 50 左右,不愧是我

然后發現 memset0 和 zoxx 在我旁邊

他們好厲害啊,我自閉了

碼碼碼,大概三點半成功 get 58

我是 sb,然后上了個廁所冷靜了一下

算了,心態崩了,打四方暴力吧

艹,居然打出來了,四點半了。

好像可以二方?

打完五點十幾,腦子一抽,會一個 log 了。

碼一碼,五點半了。

md,沒調出來我退役好了

終於,五點四十八調出來了,1A 了。

然后 t3 m=1 的包沒時間寫了

不過 a 了一題,很開心。

\(21+100+19=140\)

題目:

t1:

給定一個排列 P,將字典序 <=P 的排列按順序接在一起,求本質不同的子序列(可以為空)的個數。

\(n\le 50\)

t2:

有 n 個集合,每次等概率選擇兩個不一樣的集合合並起來

定義一個集合的價值為 (max(S)-min(S))^2。若有 k 個集合,價值為 k 個集合價值之和。

f(i) 為有 i 個集合的期望價值,求 f(l)97673+...+f(r)97673

\(n\le 2\times 10^5\)

t3:

有一個 n*m 的矩陣,初始為空。有 q1 次操作 1,有 q2 次操作 2,操作 1 后操作 2

操作 1:s,l,r,x,將 gcd(a,s)==1,l<=b<=r 的格子 (a,b) 加 x

操作 2:s,l,r,詢問 gcd(a,s)==1,l<=b<=r 的格子之和

數據保證 s 隨機。

\(n,m\le 5\times 10^4,q_1,q_2\le 10^5\)

t1,t2 mod = 998244353

t3 mod = 2^32

題解:

t1: 找規律,然后類似數位 dp 的方式矩乘算一算方案數。

t2: 三次 NTT,過程挺復雜的,期末考后再補。

t3: 你覺得我會?聽 jls 說復雜度要求導證明,\(O(n\log^3n+n\sqrt{n})\),神仙莫比烏斯反演。

Day 2

我是 sb。。。

花了兩個小時大眾分拿到后先開 t2 沒開 t3

t2 沒調出來,t3 沒寫

艹,我 tm 如果三個小時寫 t3 我還寫不出來???

最后三小時就沒拿分。。。

\(100+65+42=207\) 滾粗了。。。

有一種深深的無力感。。。

Day 3

拿了個獎,海星。

一道數學題讓我拿了個獎,海星。

不過讓我知道了我的實力不行。。。d2 難度嚴格小於 d1 難度時我 d2 考成 sb。。。開題策略失誤,先開 t2 再開 t3,導致 t2 沒調出來 t3 沒時間寫。。。

然后 t3 想了半個小時會了。。。我考場上如果最后 3h 全放 t3 上我還寫不出 t3???

這讓我想起了別人打 cf div1 隨便 A 題,我打 div2 都有些吃力。

基礎不行啊。。。要好好補一補了。。。(還有 ubuntu)

算了,結果是好的,我無所謂了。運氣好爆了。

題目:

t1: sbt

t2:

有一個分式序列,給定每個位置的值和長度的排列,分式長度小的先計算,每次詢問一個區間經計算后的值。

\(n,m\le 5\times 10^5\)

t3:

有一個無向圖,無向圖上再連一個環(i->i%n+1)的邊,權值為 10^9,問這張圖兩兩之間的最小割之和。

\(n\le 7000,m\le 10^5,w\le10^4\)

t2,t3 mod = 998244353

題解:

t1: sbt

t2: 好像有 O(n) 的做法,考慮每個數單調棧上的奇偶性。不過出題人的做法是線段樹合並,暴力又好懂,不過問了一下 srz,這個可以不用合並,記一記前綴后綴用最大子段和的方式算一算。

t3: 環上斷兩條邊后把問題轉化成一段區間內 l<=(i or j)<=r 相連和其他點之間相連的 max,這個東西可以用最小割樹的方法,也可以預處理出矩陣的前綴 max 和后綴 max,O(1) 出答案。

附:

晚上睡覺的時候想了一想,發現我考場上 t2 的思路是對的,只不過細節有些多,我 naive 的以為左右邊應該有對稱美(調不出來 flag*1),然后就爆炸了。

我們將這個序列用廣義線段樹的方法建出來,發現一個區間對應了一段右兒子和左兒子拼起來。那么我們可以用 zkw 線段樹的方法,從葉子結點向上跳,l-1 的葉子碰到左兒子把右兒子合並一下,r+1 的葉子碰到右兒子把左兒子合並一下,這樣就能算出答案了。

我們再考慮合並時一個值會變成它的逆元(下面記為翻轉)幾次。對於左邊,因為每一個子區間都是右兒子,所以除了第一個從葉子開始的右兒子結點,其他右兒子會被翻轉一次。那么我們預處理從根開始向下的逆元之積,再處理出一個節點向上最近的右兒子,跳到 lca 處就可以出答案了。

對於右邊,因為每一個子區間都是左兒子,所以每一個節點都會被翻轉到 lca 路徑上左兒子個數次。那么一段左兒子相鄰一定是奇數不翻轉偶數翻轉,所以我們可以類似左邊的方法預處理出從根開始向下的答案,不過不用處理向上最近的左兒子。不過如果 lca 下面那個結點開始到根左兒子個數有奇數個,那么要把答案翻轉。這樣就能出答案了。

不過有很多細節,比如 lca 下面那個結點是不算的,如果左邊沒有右邊不用翻轉等等。。。我考場上就被各種細節弄自閉了。。。

唉,day2 應該是可以 ak 的啊。

再說一下 d1t2 我考場的做法吧。

首先考慮排序后一對 \((i,j)\) 構成的集合對答案的貢獻。我們只用考慮這個集合在 \((i,j)\) 中間選了幾個,剩下的數合並了多少次。

\(n\) 個集合,每次有 \(n\choose 2\) 種選法,一共有 \(f_n=\prod_{i=2}^n{i\choose 2}\) 種選法。因為集合個數為 \(0/1\) 時可以不合並,所以 \(f_0=f_1=1\)

我們設在 \((i,j)\) 中間選了 \(k\) 個,一共合並了 \(t\) 次。

\[ans_t=\sum_{i=1}^n\sum_{j=i+1}^n\sum_{k=0}^{j-i-1}(a_j-a_i)^2{j-i-1\choose k}{t\choose k+1}f_{k+2}\frac {f_{n-k-2}}{f_{n-t-1}} \]

這樣就 \(O(n^4)\) 了。

接着,我們發現只有兩項與 \(i,j\) 有關。預處理出這些項,就可以優化了。

\[len_{j-i}=\sum_{i=1}^n\sum_{j=i+1}^n(a_j-a_i)^2 \]

\[val_k=\sum_{i=k}^{n-2}len_{i+1}{i\choose k} \]

那么式子就變成了

\[ans_t=\sum_{k=0}^{n-2}val_k{t\choose k+1}f_{k+2}\frac {f_{n-k-2}}{f_{n-t-1}} \]

這樣就可以 \(O(n^2)\) 了。容易發現這三個式子都可以 \(\text{NTT}\),所以就 \(O(n\log n)\) 了。

不過我 \(ans_1\) 有鍋,要特判一下,我也不知道為什么。。。如果你知道的話可以私信我。。。

以前以為自己數據結構還可以,結果反倒在大型考試做出來的第一道題居然是一道不錯的數學題。。。看來可能還是數學題比較適合我吧。。。


免責聲明!

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



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