A
題意:給一個\(n*m\)的初始為白色的矩陣,一次操作可以將一行或一列染成
黑色,問至少染出\(k\)個黑點的最少操作次數。
\(n\),\(m\)<=100,\(k\)<=1e4
B
題意:有\(n\)條線段,用二元組\((x,len)\)表示,占據\([x-len,x+len]\)的位置。
問最多能選擇多少條不相交的線段。
\(n\)<=1e5,\(x_i\),\(len_i\)<=1e9
C
題意:給定\(n\),\(k\),\(s\),構造一個序列\(a\),使得恰好有\(k\)個二元組\((l,r)\),\(\sum_{i=l}^{r} a[i]\) = \(s\)。
\(n\)<=1e5,0<=\(k\)<=\(n\),\(s\)<=1e9,\(a_i\)<=1e9
D
題意:有\(n\)張卡片,初始時每張卡片上面是\(a[i]\),下面是\(b[i]\)。一次操作可以交換相鄰兩張牌,
並將這兩張牌翻轉。最小化操作次數,使得上面的數組成的序列不降。
\(n\)<=18,\(a_i\),\(b_i\)<=50
E
題意:給定一個\(n\)點\(m\)邊的無向圖,每個點可以被染成黑色或白色,每條邊可以指定一個[1,1e9]以內的權值。
找出一種染色和給定邊權的方案,使得:
1.至少存在一個黑點,一個白點;
2.每個點到與其最近的顏色相異的點的距離為\(d_i\)。
\(n\)<=1e5,\(m\)<=2e5,\(d_i\)<=1e9
F
題意:有一個\(n*m\)的矩陣,初始時每個點都有一個顏色。
你可以對其進行任意次操作,每次操作可以任選一行(列),將這一行(列)的點全染成黑(白)色。
問共能操作出多少種不同的矩陣。答案對998244353取模。
\(n\),\(m\)<=10
題解
A
入門題。根據\(n\),\(m\)大小判斷染行還是染列。
時間復雜度:\(O(1)\)
B
經典的貪心問題。將所有線段按右端點排序,直接掃一遍,維護一下當前選到的右端點就好。
時間復雜度:\(O(nlogn)\)
C
\(傻逼題\)。直接指定\(k\)點權值為\(s\),剩下的都為\(s+1\)就行。注意\(s\)=1e9需要特判。
時間復雜度:\(O(n)\)
D
\(n\)很小,引導我們可以用指數級別的復雜度做題。首先可以想到暴力枚舉所有牌最后哪邊朝上。
考慮如何判定一個方案是否合法,並判斷其最小的移動步數。
我們將這個狀態設為\(S\),它的第\(i\)位為1就代表它是\(b_i\)朝上,否則是\(a_i\)朝上。
step1
1的個數一定是個偶數。
step2
我們根據這個01序列,可以得到最終的一個無序序列\(C\)。將這個序列排序,現在要做的就是
找一個合法的匹配方案。
可能讀者會有些疑惑:這里為什么還要判斷是否合法呢?
考慮那個01序列的另外一層意義:如果某一位為1,那么這一位的這張牌就移動了奇數次,否則就是偶數次。
這個東西分奇偶討論一下,用vector存一下所有\(c_i\)的所有出現位置,一一匹配就行。
由於\(C\)中可能有重復元素,最優策略就是原序列中左邊的點盡量和排序后的\(C\)的左邊的點匹配。這個是顯然的。
這樣,我們就相當於得到了一個排列\(P\),表示一種匹配方案。
step3
那么確定這個方案合法后,如何求出最少的移動步數呢?可以發現這就是這個排列的逆序對個數。把它算出來,更新答案。
時間復雜度:O(\(2^n\) \(\times\) \(n^2\))
E
考慮從何下手這個問題。
首先,我們肯定希望這個最短路盡量好求一些。最好是所有的匹配都是兩點直接相連的。
當然事實確實是這樣的。這里給出一個證明。
考慮反證法:如果存在一種匹配方案\(a->c\),\(b->c\),\(a\),\(b\)是黑點,\(c\)是白點,且這三點的連邊情況是:\(a---b---c\)。
首先,如果\(b\)和\(c\)匹配,那么\(a\)不會和其他點匹配。
情況1
\(d_a\)<\(d_b\):顯然這種方案是不合法的;
情況2
\(d_a\)>=\(d_b\):顯然可以將\(b\)換成白點,\(c\)換成黑點(\(c\)不換也行,具體看情況)。
因此,若有解,一定存在一種匹配方案,使得所有點都和它直接相連的一個點匹配。
接下來,考慮這樣的一個匹配過程:
一個節點\(A\)找到了另一個節點\(B\),與其匹配。那么那個節點\(B\)有兩種選擇:一是和\(A\)匹配,一是和其他節點匹配。
重點是,無論如何匹配,\(d_B\)一定大於等於\(d_A\)。
由此下去,一定有一個最終狀態,節點\(B\)別無他選,只能和\(A\)匹配。我們發現了隱藏在題目中的單調性。
由此,我們得到了一個做法:先將所有節點按\(d_i\)從小到大排序,然后對於每個節點,
先找有沒有與其直接相連的未被染色的點,且兩者的\(d\)相同。若有,則兩點互相匹配,若沒有,再找一個已被染色的點,
與其匹配即可。若還沒有,則無解。
注意一定要先找能互相匹配的點,因為一次可以染兩個節點的色。
時間復雜度:\(O(nlogn+m)\)
F
待填坑~
代碼
先咕在這里,等寫完F再放吧~