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\) 次。
這樣就 \(O(n^4)\) 了。
接着,我們發現只有兩項與 \(i,j\) 有關。預處理出這些項,就可以優化了。
那么式子就變成了
這樣就可以 \(O(n^2)\) 了。容易發現這三個式子都可以 \(\text{NTT}\),所以就 \(O(n\log n)\) 了。
不過我 \(ans_1\) 有鍋,要特判一下,我也不知道為什么。。。如果你知道的話可以私信我。。。
以前以為自己數據結構還可以,結果反倒在大型考試做出來的第一道題居然是一道不錯的數學題。。。看來可能還是數學題比較適合我吧。。。
