Codeforces Round #569 題解
CF1179A Valeriy and Deque
有一個雙端隊列,每次取隊首兩個值,將較小值移動到隊尾,較大值位置不變。多組詢問求第\(m\)次操作時隊首兩個數。
顯然\(O(n)\)次以內隊首變成了最大值,之后就循環了,暴力前\(O(n)\)個操作的答案即可
https://codeforces.com/contest/1179/submission/55878330
CF1179B Tolik and His Uncle
有一個\(n*m\)的網格圖,你在\((1,1)\)。你要遍歷一遍這個網格圖,正好經過每個點一次。唯一的限制是每次移動的移動向量不能相等,求方案。
顯然有解。
一種構造方案是每次取第一行和最后一行,假設是格子\(a_1,\cdots,a_m\)和格子\(b_1,\cdots,b_m\)。向方案中加入\(a_1,b_m,a_2,b_{m-1},\cdots,a_m,b_1\)。只剩一行的時候假設是格子\(a_1,\cdots,a_m\),加入\(a_1,a_m,a_2,a_{m-1},\cdots\)(交替選第一個數和最后一個數)。
證明顯然
一種好寫的實現方法構造兩個數列\(s_{1,1},s_{1,2},\cdots,s_{1,m},s_{2,m},s_{2,m-1},\cdots s_{2,1},s_{3,1},\cdots\)和\(s_{n,m},s_{n,m-1},\cdots,s_{n,1},s_{n-1,m},s_{n-1,2},\cdots s_{n-1,m},s_{n-2,m},\cdots\),交替選第一個坐標直到\(n*m\)個為止。
https://codeforces.com/contest/1179/submission/55878330
CF1179C Serge and Dining Room
(題面萬惡的zbzy真的23333....
食堂里有\(m\)名同學排成一隊,還有\(n\)個菜。因為萬惡的zbzy,所以每個菜只有一個,被取完就沒了。第\(i\)個菜價格為\(a_i\)元,第\(j\)個同學有\(b_i\)元。
開始打飯時,從同學\(1\)到同學\(m\)依次打飯。每個同學會買下他能買得起的價格最高的菜(萬惡的zbzy),如果啥都買不起就啥都不買(萬惡的zbzy)
每次會修改\(a\)或\(b\)中的一個值,然后詢問如果現在開始打飯,剩下的菜中價格最高的。不存在輸出-1。
(當時真的腦抽了先想了個樹套樹然后又整體二分然后主席樹。。。。后來發現一個線段樹就行了233
搞一個線段樹,對\(a_i\)的位置\(+1\),對\(b_i\)的位置\(-1\)。
詢問就是最大的左端點\(l\)使得區間\([l,\infty)\)的最大后綴和\(>0\),不存在即為-1。
https://codeforces.com/contest/1179/submission/55890192
CF1179D Fedor Runs for President
有一棵樹,你要增加一條邊(可以重邊,不能是自環)使得新圖的簡單路徑(不同的定義是邊集不同)數量最大。
我也不知道怎么就切了。。。
瞎猜結論,按照求直徑的方法搜兩遍就切了。。。。。好像還是對的。。。。(差點gm了
https://codeforces.com/contest/1179/submission/55895158
CF1179E Alesya and Discrete Math
交互題。
定義\(f(x)\)是好的當且僅當若\(f(x)\)在\(x\)和\(x-1\)處都有定義,滿足\(f(x)=f(x-1)\)或\(f(x)=f(x-1)+1\)。
有\(n\)個好的函數\(f_1,f_2,\cdots,f_n\),都滿足
- 定義域是\([0,10^{18}]\cap \mathbb{Z}\)。
- \(f(0)=0,f(10^{18})=L\)。
這些函數都是確定的,你每次可以詢問一個\(f_i(x)\)。你最多提出\(200000\)次詢問。交互器不是依賴型的。
還滿足\(n|L\)。
對每個函數\(f_i\)你需要選擇一個區間,即\([l_i,r_i]\)。需要滿足\(f_{i}(r_{i}) - f_{i}(l_{i}) \geq \frac{L}{n}\)。
而且還要滿足任意兩個區間的交為空或只有一個端點。
首先有一個naive做法:設有\(n\)個函數,在值域\([L,R]\)中求答案。先對每個函數\(f_i\)二分出一個\(x_i\)使得\(f_i(x_i)=\lfloor \frac{L+R}2\rfloor\),然后把函數按\(x_i\)排序,取中間的函數,遞歸下去\(f_{1\cdots mid}\)值域是\([L,f_{mid}(x_{mid})]\),\(f_{mid+1\cdots r}\)值域是\([f_{mid}(x_{mid}),R]\)。
然后遞歸做。
(后面部分還沒切,不保證正確性
但是這樣太慢了,換一個做法。每次隨機一個函數\(f_p\),二分出\(x_p\),對其他的\(f\)計算\(f_i(x_p)\),即可知道\(x_i\)和\(x_p\)的大小關系。做完之后將函數分成了兩邊在大的一邊繼續找答案。
咕了咕了這題太屎了