2019牛客暑期多校訓練營(第二場)


A. Eddy Walker

solved by rdc 202min -1

題意 一個點在長度為 \(n\) 的環上游走,輸出第一次訪問到所有點時在 \(x\) 上的概率。

做法 考慮經典的線段上隨游走問題,數軸上有 \(x=0\)\(A\) 點,與 \(x=n\)\(B\) 點,那么位置為 \(i\) 的點被 \(B\) 吸附的概率為 \(\frac{i}{n}\),分兩次考慮,先以 \(m-1\),\(m+1\) 為壁做隨機游走,再以 \(m-1\ or\ m+1\)\(m\) 為壁做隨機游走。


B. Eddy Walker 2

solved by rdc 262min -1

題意 一個點在數軸上,每次往前隨機跳 1 到 \(k\) 步。求能到達 \(x\) 的概率 \(p(x)\),以及 \(x\) 趨於正無窮時 \(p(x)\)

做法

  • \(x\) 不為正無窮時,\(p(x)\) 可由線性遞推得出,施展 BM。
  • 否則,注意到跳 \(a\) 步,移動距離的期望為 \(\frac{(k+1)a}{2}\),因此 $${\lim_{x \to +\infty}}p(x)=\frac{2}{k+1}$$ (我覺得我在口胡)

C. Go on Strike!


D. Kth Minimum Clique

solved by F0_0H 230min -6

題意 給定一個帶點權簡單圖,求點權和第\(k\)小的完全子圖

題解

  • 首先對n個點根據點權排序
  • 考慮對於任意一個完全子圖,可以再擴充的點一定為該完全子圖每個點鄰接點的交集
  • 並且優先擴充點權更小的一定更優,所以可以選擇按點權大小順序擴充,這樣還保證了不會重復
  • 然后就可以用優先隊列維護更新,每次實現一個擴充,並新加這個完全子圖,再往后推一推,搞一搞就行了
  • 維護臨接點用bitset

TLE by rdc 二分上界,DFS 回溯找團,然后解體,二分受到了不公正的對待。


E. Maze

upsolved by sdcgvhgj
題意 n*m的格子,每次向下走或者左右走,不能回頭,詢問方案數,帶修改。
做法 線段樹套矩陣乘即可


F. Partition problem

solved by rdc 150min -3

題意\(2n\) 個人,現需划分成兩個等大的集合,一個無序 pair, \((x,y)\) 若,\(x,y\) 屬於不同的集合,對答案的貢獻為 \(v_{xy}\),求極大答案。

做法

  • 進行折半枚舉,划分成兩個集合 \(L,R\)
  • 預處理 \(L,R\) 每個子集內部無序對權值和。\(O(2^nn)\)
  • 預處理 \(R\) 中每個元素和 \(L\) 中每個子集權,無序對權值和 \(O(2^nn^2)\)
  • 枚舉 \(L\) 中,哪些人屬於集合 A,哪些人屬於集合 B,枚舉 \(R\) 中哪些人屬於集合 \(A\)\(O(C(2n,n)*n)\)

G. Polygons

upsolved by sdcgvhgj
題意 求n條直線把平面割成的若干多邊形
做法

  • \(n^2\)個交點,多邊形最多有\(n^2\)
  • 相鄰的兩交點之間相互連兩條邊,
  • 從一個點開始每次沿順時針夾角最小的一條邊移動,並刪除這條邊,直到走回這個點,所經過的點形成一個多邊形
  • 三分eps即可(笑)

H. Second Large Rectangle

solved by rdc 93min -2

題意 給一個01矩陣,求次大全為1的子矩陣大小。

做法

  • 求極大子矩陣,預處理每個位置向上能連續延伸多少個 1,枚舉下界,單調棧帶走,記錄次大的答案。
  • 把最大子矩陣去掉一行,或者去掉一列,嘗試更新答案。

I. Inside A Rectangle


J. Subarray

solved by F0_0H 107min -3

題意 長度為\(1e9\)\((1, -1)\)序列,下標從\(0\)\(1e9-1\),已知有\(n\)個區間為\(1\),其他為\(-1\), 問存在多少個區間的和\(>1\)(保證\(\sum_{1\leq i\leq n}r[i]-l[i]+1\leq 1e7\)

題解

  • 可能作為區間端點的點個數最多為\(3e7\)
  • \(f[i]\)表示以第\(i\)個區間右端點為答案右端點的最大區間和
  • \(g[i]\)表示以第\(i\)個區間左端點為答案左端點的最大區間和
  • \(f[i] = max(0, f[i-1]-(l[i]-r[i-1]-1))+r[i]-l[i]+1\)
  • \(g[i] = max(0, g[i+1]-(l[i+1]-r[i]-1))+r[i]-l[i]+1\)
  • 如果\(f[i] + g[i+1] \geq l[i+1] - r[i] - 1\),說明答案的左右端點可以跨越\([r[i]+1, l[i+1]-1]\),那么把這些合並考慮
  • 搞完上面,問題就變成了給你一個長度不超過\(3e7\)\((1,-1)\)序列,問有多少區間和大於1
  • 樹狀數組時間\(O(n*logn)\),穩\(T\)
  • 考慮優化:
  • 很好用的性質:每次查詢與上次查詢的差距等於1
  • 從左到右枚舉左端點,統計右邊比當前值大的個數
  • 加個標記,標記左移,穩


免責聲明!

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



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