1. 程式人生 > >2018.11.3模擬賽題解

2018.11.3模擬賽題解

題解

排隊

20% $1\le n\le 20, 1\le x,h_i\le 20$ 隨便暴力

50% $1\le n \le 2000, 1\le x,h_i\le 1e9$ 列舉把哪個定成中位數

100% $1\le n\le 2e5,1\le x,h_i\le 1e9$

先把高度排序。貪心地修改。最好的方法是把最中間的人變成$x$。那麼就把左邊比他高的或者右邊比他矮的都改成$x$就好啦。

翹課

10% $2\le n,m\le 500,k=1$

20% $2\le n,m\le 200000,k=1$ 暴力

40% $2\le n,m\le 2000,k=2$ 找環

70% $2\le n,m\le 2000,k<n$ 每次跑點判斷

100% $2\le n,m\le 200000,1\le k <n$ 倒著刪

考慮先把所有邊加進去,再倒過來刪邊。

對於每個點,我們考慮要不要刪掉它,刪掉它表示它連線著選中的點的度小於 K 了。刪完它之後我們把它鄰居的度都--,然後再看它的鄰居要不要被刪掉。這樣預處理把每個點判一次要不要刪。

之後刪一條邊也是刪完就判斷連線的兩個點需不需要被刪掉。因為每個點只會被刪一次,所以整體還是O(n)的。

題目做法可能多樣,但思路應該都是倒過來。

 

運氣大戰

20% $n\le 10,q\le 10$ 暴力

另30% $n\le 1000,q\le 100$ 這個點我也不記得為什麼放了,但看起來很多人只拿到了50所以可能還是有點意義的?

另20% $n\le 30000,q\le 500$ nq 的 dp

100% $2\le n\le 30000,1\le q\le 10000,1\le w_i,r_i \le 1e6,1\le a_i\not=b_i \le n$

由於排序不等式,我們儘量想順序放。兩邊都排序。

由於 n 個不能配的干擾,又不能完全順序放。

有個結論,最後匹配出第 i 個人的運氣值是第 j 個的話,$|i-j|\le2$。這個結論從最小化逆序對的個數來看,自己把附近幾個線連起來畫一畫證明一下。

這樣就可以用 dp[i]表示到 i 為止所有配好的最優答案。計算的時候需要用到前三輪的答案然後討論一下。這個是 O(nq)的,可以過70%。

用線段樹記錄區間答案。區間記錄這樣的資訊:把這個區間前0-2個和後0-2個元素去掉的答案,用3x3的矩陣維護。這樣複雜度是O(qlogn)。