1. 程式人生 > 其它 >10.11 牛客

10.11 牛客

沒有摘要的摘要

10.11 牛客

目錄

得分情況

30 + 0 + 40 + 0 = 70


題解

T1 最終測試

\(30\ Pts\)

列舉所有可能性 對於每種可能性 對選手排序得到排名


\(60\ Pts\)

\(E_i\) 表示第 \(i\) 為選手的期望排名 \(s_i\) 為第 \(i\) 位選手的得分 有:

\[E_i = 1 + \sum_{j \ne i}P(s_i < s_j)\\ = 1 + \sum_{j \ne i}\frac 1{16}\sum_{0 \leq x1, x2, y1, y2 \leq 1} [x_1a_{i, 1} + x_2a_{i, 2} < y_1a_{j, 1} + y_2a_{j, 2}] \]

複雜度: \(O(n^2)\)


這一部分的程式碼


\(100\ Pts\)

看上面那個式子 \(j\) 的列舉與 \(x_1, x_2\) 是不影響的 可以交換列舉的順序

\[E_i = 1 + \frac 1{16} \sum_{0 \leq x_1, x_2 \leq 1}\sum_{j \ne i}\sum_{0 \leq y_1, y_2 \leq 1} [x_1a_{i, 1} + x_2a_{i, 2} < y_1a_{j, 1} + y_2a_{j, 2}] \]

考慮裡面的兩個求和 當 \(x_1a_{i, 1} + x_2a_{i, 2}\) 確定之後就是求比其大的數的個數 將所有數存下來排個序 每次查詢的時候二分

複雜度: \(O(n\log n)\)


這一部分的程式碼


T2 空間跳躍

題解說 \(dfs\) 期望能通過 \(40\%\) 的資料 但是 BS 爆零了


將構造過程反過來 看成從 \(n\)\(1\) 的構造 那麼操作 \(2, 3\) 可以看成 \(n = \frac n2\)\(n = \frac n3 + 1\)

題解說根據 \(3n + 1\) 猜想 對於給定的範圍 只要 \(n\) 為偶數就讓 \(n = \frac n2\) 的話 正整數的 \(n\) 必然能到達 \(1\) 負整數的 \(n\) 必然能落到 \(-1, -5, -17\)

\(n\) 的絕對值足夠小之後可以使用操作 \(1\)

將其變為正整數 在使用操作 \(2, 3\)\(n\) 變為 \(1\)

題解說通過驗證這樣的構造不會超過 \(1500\)


程式碼


T3 快速訪問

題目要求維護一個點集到某個點的距離的平方和

直接差了

\[\sum_{v \in S}dis(u, v)^2 = |S|dep_u + \sum_{v \in S}dep_v^2 + 4\sum_{v \in S}dep_{lca(u, v)} + 2dep_u\sum_{v \in S}dep_v - 4dep_u\sum_{v \in S}dep_{lca(u, v)} - 4\sum_{v \in S}dep_vdep_{lca(u, v)} \]

分別維護後面每一項即可

後面那一坨東西的第一項 第二項 第四項是可以直接維護的 其他項可以通過樹剖維護

這裡只補一個東西

\[\sum_{i = 1}^k(2i - 1) = 2\sum_{i = 1}^ki - k = 2 \times \frac {(1 + k)k}2 - k = k^2 \]

然後就可以直接做了


程式碼


T4 門童

咕~