NOI.ac第五套題解
阿新 • • 發佈:2018-12-19
題解
排隊
20% 隨便暴力
50% 列舉把哪個定成中位數
100%
先把高度排序。貪心地修改。最好的方法是把最中間的人變成。那麼就把左邊比他高的或者右邊比他矮的都改成就好啦。
翹課
10%
20% 暴力
40% 找環
70% 每次跑點判斷
100% 倒著刪
考慮先把所有邊加進去,再倒過來刪邊。
對於每個點,我們考慮要不要刪掉它,刪掉它表示它連線著選中的點的度小於 K 了。刪完它之後我們把它鄰居的度都–,然後再看它的鄰居要不要被刪掉。這樣預處理把每個點判一次要不要刪。
之後刪一條邊也是刪完就判斷連線的兩個點需不需要被刪掉。因為每個點只會被刪一次,所以整體還是O(n)的。
題目做法可能多樣,但思路應該都是倒過來。
運氣大戰
20% 暴力
另30% 這個點我也不記得為什麼放了,但看起來很多人只拿到了50所以可能還是有點意義的?
另20% nq 的 dp
100%
由於排序不等式,我們儘量想順序放。兩邊都排序。
由於 n 個不能配的干擾,又不能完全順序放。
有個結論,最後匹配出第 i 個人的運氣值是第 j 個的話,。這個結論從最小化逆序對的個數來看,自己把附近幾個線連起來畫一畫證明一下。
這樣就可以用 dp[i]表示到 i 為止所有配好的最優答案。計算的時候需要用到前三輪的答案然後討論一下。這個是 O(nq)的,可以過70%。
用線段樹記錄區間答案。區間記錄這樣的資訊:把這個區間前0-2個和後0-2個元素去掉的答案,用3x3的矩陣維護。這樣複雜度是O(qlogn)。