day0
早上五點半起來趕飛機。
下午到北大報到,然后是試機。
試機賽有一道 PKUSC 原題,一道造計算機題,一道交互通信題。感覺要完。因為我既不會造計算機也不會通信題。
農園一樓的菜還是挺好的,就是有點貴。隨便吃一點就要 15+,吃好一點就要 25+。
day1
開場先看題,然后感覺第一題挺可做的,就頭鐵去寫 t1 了。最終寫了兩個小時還是寫出來了。
然后去看第二題,先把暴力寫了。又看到有一個所有數都是某個質數的冪的子任務,也去寫了一下。最開始寫了個比較復雜的做法,后來想到只需要記指數的差就好了,改了一下就過了那個子任務。
第三題想了好久還是不會,只能打暴力了。
得分:100+49+25=174
出考場后聽說有人兩個多小時就AK離場了。。。
下午講評,三題都挺簡單的,都可以放成聯賽模擬了,但我就是寫不出來。我退役吧。
晚上回賓館頹睡覺。
題解
A
這個質心坐標好像不是所有頂點坐標之和的平均數啊?
只用求出每個頂點最先接觸地面的時間再取個min就好了。
對於每個頂點,它的 \(y\) 坐標是一個二次函數+正弦函數的形式,那么可以先求出最早碰到地面的時間是在正弦函數的那個周期內,然后求一下導二分一下得到這個周期內的單調區間,再在單調下降的區間內二分得到答案。
時間復雜度:\(O(n\log^{-1}\epsilon)\)
B
記 \(x_i=\frac{b_i}{d_i},y_i=d_i\)
那么 \(\prod b_i\leq \prod d_i^2\Longleftrightarrow \prod x_i\leq \prod y_i\)
注意到 \(\prod x_i<\prod y_i\) 的方案是和 \(\prod x_i>\prod y_i\) 的方案一一對應的,所以我們只需要求出總的方案數和以及
\(\prod x_i=\prod y_i\) 的方案數就好了。
時間復雜度:\(O(n\sqrt a_i+n\log^2a_i)\)
C
注意到把一棵樹的點分樹沿着原樹中的一條邊切開后得到的兩棵樹是每個點選擇他在對應那棵子樹中的最近祖先后連成的樹。那么反過來也可以把兩棵點分樹拼在一起,就是把那條邊的兩個端點到根的路徑按任意順序拼在一起。
記 \(f_{i,j}\) 為以 \(i\) 為根的子樹構成的點分樹中,\(i\) 的深度為 \(j\) 的方案數。
轉移為
大概是這樣吧
搞個后綴和優化一下就好了。
day2
看完題之后感覺第三題比較簡單,弄個指數生成函數再反演幾下就好了。
然后去看第一題,想了一會想到了 \(O(n\sqrt n\log^2n)\) 的垃圾做法,顯然過不了。又想了一會,就放棄去寫暴力+一些部分分。
t2 先寫了個暴力,打了個表發現了一點規律,就是每一行的最左邊一個到最右邊一個 \(1\) 中只有前面幾個位置可能有 \(0\)。這樣 DP 就只用 DP 每行的前面一部分就好了。
得分:\(55+49+100\)
然而又有人AK了。我退役吧。
題解
A
首先你要會 \(O(n+m)\) 的無修改的做法。
考慮每加入 \(O(\sqrt m)\) 個修改就重構一次,詢問的時候就把沒有扔進去重構的修改單獨計算一下貢獻。
時間復雜度:\(O((n+m)\sqrt m)\)
B
先把全部周長 \(\div 2\)。
考慮一個 \(1\times 1\) 的矩形,能把 \((x,y)\) 的方案變成 \((x+1,y+2)\) 的方案。
記 \(f_i\) 為 \(2S-C=i\) 的方案中 \(S\) 最小的是多少。
還有一個結論:寬 \(\geq 2\) 的矩形中每種寬只會出現一次。因為你可以把兩個 \(a\times b\) 和 \(a\times c\) 的矩形變成 \(1\times a\) 和 \(a\times (b+c-1)\) 的矩形。
后面的部分我忘了,想起來再補。
時間復雜度:\(O(n\sqrt n)\)
C
記 \(f_i\) 為把 \(1\sim n\) 的排列分成 \(i\) 段,每段內都是上升的且每段的最后一個大於下一段的第一個的方案數。
記 \(g_i\) 為把 \(1\sim n\) 的排列分成 \(i\) 段,每段內都是上升的的方案數。
那么 \(g_i\) 就是第二類斯特林數 \(S(n,i)\)
在容斥一下就可以得到 \(f_i\)
時間復雜度:\(O(n\log n)\)
day3
開場先看題,發現 t2 的 80 分之前做過,直接 lct+線段樹就好了。然后碼了半個小時交上去拿到了 80分。
然后去看第三題,直接把 t2 的代碼復制過去加點東西就好了。
t1 不會造計算機,只會三個部分分。
最后自閉了一個小時。
得分:15+80+100
題解
A
弄一個校驗碼。單個數的校驗碼 \(\bmod P=C\),多個數的校驗碼就把單個數的校驗碼異或在一起就好了。如果 \(\bmod P=C\),說明只有一個出現了奇數次的數。
然后弄 15 個哈希函數,把所有數扔進 15 個桶內,每個桶中有 1/2 的概率異或每個值。
最后枚舉所有 \(2^{15}\) 個桶的組合,如果只有一個數就輸出。
\(F_2\) 下的 \(15\times 10\) 的矩陣滿秩的概率約為 \(96\%\),再加上校驗碼的誤差,正確率為 \(90\%+\)
B
不會。
C
先用 lct+可持久化線段樹處理所有區間的代價。
然后決策單調性優化DP即可。
時間復雜度:\(O(nk\log^2n)\)
day4
先開 t1。感覺細節會很多,想了一會沒想到什么好的做法,就寫暴力,下一題。
t2 猜測是網絡流,試了幾種建模方法都不對,就寫暴力,下一題。
t3 之前聽說過矩乘可以分塊做,就寫了矩乘 ,把整個 \(125\times 125\) 的網格分成 \(5\times 5\) 個 \(25\times 25\) 的子矩陣,然后每個節點負責算一個子矩陣的矩陣乘法,最后把所有節點算的結果再傳回來。總共要 \(3\times n^{\frac{2}{3}}+1=76\) 輪。
這個通信題寫起來挺麻煩的,各種坐標都要手算,調試也很不方便,寫了好久才拿到分。
然后就自閉了。
得分:\(24+8+61\)
題解
A
注意到初始的 dis 值只有 \(2^{60}\),而不是 \(n\times 2^{60}\)。
大概就是讓每個點的 dis 是最短路的時候才更新其他點。
\(rank_x\) 是 \(x\) 是第幾個 dis 值達到最短路的。
第 \(i\) 次入隊時 dis 變成 \(2^{60}-i\)
最后一次時 dis 變成 \(rank_x\times k\)
B
連通塊個數最多等價於沒修路的邊數最少。
然后就直接費用流建圖了。S 連到左邊的點下限 1 上限 \(k\) ,右邊的點連到 T 下限 1 上限 \(k\),每條邊費用\(-\infty\),那么就是最大費用(最小/可行)流了。注意不是最大費用最大流。
C
我的做法每輪每個點只能向 \(25\) 個點發信息。因為每個點每輪只能向同一個點發送一條信息。
那么怎樣發送更多信息呢?
轉發!
假設 \(A\) 要向 \(B\) 發送 \(25\) 個信息,那么我們就可以先由 \(A\) 向 \(25\) 個節點發信息,然后下一輪這 \(25\) 個節點再向 \(B\) 發信息。
這樣就可以把輪數優化到 \(6n^{\frac{1}{3}}+1=31\) 輪。