「題集」精緻的袖珍題目
阿新 • • 發佈:2021-08-10
一些體量比較小,但是有一定價值和一些閃光點的題目(也許就是想水幾篇題解
有 \(i,j\) 顏色不同。不難發現這是將所有的 \((i,j)\) 當作邊加入圖中後,對圖進行黑白染色,模擬操作即可。如果不存在染色方案,那麼就應該輸出 0。
;
[NOIP2008 提高組] 雙棧排序
題目連結:洛谷。
考慮兩個位置不能被放入同一個棧中的條件。
通過多次手玩可以發現,如果有 \(i<j<k,a_k<a_i<a_j\),則 \(i,j\) 不能被放入同一個棧中。
\(a_i<a_j\) 要求 \(i\) 先於 \(j\) 出棧,但是 \(i\) 想要出棧就必須要 \(j\) 入棧,所以 \(j\) 要先於 \(i\) 出棧,因此矛盾。
一定要注意這個 \(k\) 的存在,才能保證 \(j\) 必須要進棧。
現在我們有兩個棧,這就說明我們需要將所有位置分到兩個集合當中,滿足每個集合中元素兩兩不衝突。分集合可以看作對點染色,而染色的要求就是,對於任意一對衝突的 \((i,j)\)
假如我們知道了染色方案,我們可以貪心地構造出操作序列——只需要每一輪貪心地選取字典序最小的合法操作即可。操作序列中 a
的位置由染色方案限制,因此我們需要儘量讓較小的位置可以被放入第一個棧中,貪心地染色即可。
小結:
- 對於重要結論,一定保證正確,不能缺漏或者不完整。一定要用多種資料來檢查,最好可以給出嚴謹的說明/推導!
- 注意將問題轉化到圖上這種研究方式,直觀清晰;轉化看物件的角度常常是有效的。
[CF1064D/CF1063B] Labyrinth
從 \((x_0,y_0)\) 出發到達 \((x_1,y_1)\) 的時候,可以發現向左/向右的次數必然滿足一條等式關係:
\[x_1-x_0=R-L \]那麼只需要最小化其中一個量即可。
小結:
注意隱含條件:如果遇到多個變數的問題不方便轉化,不妨入手看看特定情況下(某些資訊列舉/推算之後)有沒有變數之間的關係。
[CF877D] Olya and Energy Drinks
每個位置在行和在列上可以到達的位置是一段區間,因此我們可以使用 set
維護每一行、每一列上未被遍歷的位置。
小結:這裡利用了 BFS 的特性(每個點只需要被遍歷到一次),同時也利用了圖的特性。注意使用資料結構維護有效點的方法
使用線段樹優化建圖 +0/1BFS 應該也有正確的複雜度,不知道為啥過不了。