覆盤
T1。好像很好做。先想了一個 \(\mathcal O(n |c_{i,j}|^2)\) 但是帶四倍常數的做法。感覺加上一些最佳化和卡常後問題不大。於是開寫。
程式碼好長!!!除錯好久!!!
調完後樣例 6 跑 20s,最終最佳化後還是 7s。實在最佳化不了了於是考慮換做法。
發現列舉三條邊後,剩下的用類似掃描線邊掃邊用樹狀陣列維護即可。複雜度跟上面一樣,但是沒了四倍常數,而且樹狀陣列跑的飛快。於是寫。
然後又調了好久。
最後樣例 6 2.7s。時限 2s 但實在最佳化不動了。棄之。
笑點解析:
結果就樣例 6 超時。
T2。二分是肯定的。然後呢?特殊性質是什麼玩意?
哦性質 C 好簡單寫了。\(n \le 20\) 好簡單寫了。然後沒一點思路。
T3。出題人l了t大的。化身總司令跑路。
T4 什麼牛魔題面?\(k \le [2,4]\)?哦 \(k=2\) 就是個二維數點模板題。快寫。
然後沒寫完。
預期 \(?+45+0+0\),實際 \(100+50+4+0=154\)。T1 竟然過了。T2 算錯分了,確實應該是 \(50\)。T3 過了 \(T = 1\)???
總結
- 好的:
- T1 過了。
- T2 想到了二分(雖然是最簡單的一步)
- 不足:
- T4 丟了 \(17\) 分。
- T3, T4 讀懂題的時間太晚啦。
知識點
- T1:列舉,二維數點。
- T2:二分,猜結論。
題解
A. 消毒
我們為每種病毒,畫一個能完全包含住所有這種病毒的矩形。那麼問題就變成了,選擇一個面積 \(\le S\) 的矩形,使得其包含的病毒矩形數量最大。
注意到病毒矩形只有 \(500\) 種,而答案矩陣的邊如果能貼著某個病毒矩形的邊一定更優。也就是說答案矩形的上下左右邊界分別只有 \(500\) 種可能的取值。
不妨列舉上下邊界。然後把所有不在這兩條線內的病毒矩形刪掉。
再列舉左端點 \(l\)。此時最大的右端點 \(r\) 可以直接算出來。於是問題變成了,快速求沒被刪除的子矩陣中,左邊界 \(\ge l\),右邊界 \(\le r\) 的數量。這是一個二維數點問題,樹狀陣列即可。
複雜度 \(\mathcal O(|c_{i,j}|^3 \log n)\)。加上一些小最佳化後可過。
B. 卡牌
首先二分答案。我們需要判斷:是否存在一種操作方法,使得第 \(m\) 大 \(\ge mid\)。
我們將 \(\ge mid\) 的數看作 \(1\),\(< mid\) 的數看成 \(0\)。於是我們要求,有一個 \(01\) 序列,每次將奇數位置上的數寫在黑板上,然後選擇一個數刪掉,這樣操作結束後黑板上最多能有多少個 \(1\)。如果這個數量 \(\ge m\) 則 check 合法。
可以證明先將所有 \(0\) 刪掉,再將剩下的 \(1\) 刪掉是最優的。而所有 \(0\) 刪完後剩下的 \(1\) 的貢獻可以直接算(設有 \(k\) 個 \(1\),則貢獻為 \(\sum_{i=1}^k\lceil \frac i2 \rceil\))。所以我們只需要考慮每一步刪掉哪個 \(0\) 最優。
對於一個極長 \(1\) 段,設其長度為 \(k\)。若 \(k\) 為偶數,那麼在所有 \(0\) 都刪完之前的任意一輪,這其中一定會有恰好 \(\frac k2\) 個被寫在黑板上(即這 \(\frac k2\) 個位置是奇數)。若 \(k\) 為奇數,我們單獨拿出最左邊(或最右邊)的一個,那麼剩下的也是一個長度為偶數的塊。
我們把上面說的偶數塊的 \(1\) 的貢獻提前計算好再刪掉後,整個序列會變成若干個連續 \(0\) 塊被 \(1\) 隔開的樣子(\(0001000010101001\dots\))。考慮這樣一組構造的操作方案:
- 將 \(\color{red}000\) 全部刪掉;
- 將 \(\color{blue}0000\) 的後三個刪掉,變成 \(\color{blue}0\);
- \(\color{green}0\color{black},\color{yellow}0\) 不做操作;
- 將 \(\color{orange} 00\) 的最後一個刪掉,變成 \(\color{orange} 0\);
- 將 \(\color{purple}000\) 全部刪掉。
- 最後依次刪掉 \(\color{purple} 0\color{black},\color{orange} 0\color{black},\color{green}0\color{black},\color{yellow}0\color{black},\color{blue}0\)。
我們計算一下這樣的答案。或者說,我們計算一下每個 \(1\) 在幾個序列中的位置是奇數。
如何計算答案?這是最難的部分。不想說了只放張圖吧(需要分別計算三種顏色的貢獻):