CF1672E
有顯然的 \(n \log n\) 次做法,對每種行數二分最短列數,但這樣求出的資訊太多了。
那麼一個初步的想法是想辦法淘汰掉不優的選擇。
少二分幾次,二分什麼的資訊量最大呢?把總長度二分出來即全部放在同一行,對於放 \(h\) 行,它能更新答案當且僅當 \(w_h \cdot h < S + n -1\),其中 \(S\) 為總長度。這個限制很嚴,不能讓 \(h\) 更大因為此時每個單次後面都會有一個空格,但又最少會放 \((S+n-h)/h\) 行,因此唯一一種方法是 \((S+n-1)/h\),問 \(O(n)\) 次即可。
詢問次數 \(\log n + n\)。
CF1354G
先找一塊石頭。因為 \(k \leq n/2\),隨機 \(25\) 次,將當前最大的物品和它比較,留下的東西不是石頭的機率是 \((1/2)^{25}\)。
接著倍增跳字首以找到第一個有禮物的區間。找到後在裡面二分。總複雜度是 \(2 \log n - \log_2(C)\),其中 \(C\) 是錯誤率。
HDU7393
把人分成 \(n/m\) 組,每組 \(m\) 人,想辦法讓每組有一個人猜對就行了。想辦法讓一組人猜一整個剩餘系。設其他人的和為 \(S\),第 \(i\) 個人猜 \(S+i\) 即可。\(S + a_i\) 的和為定值,每個人猜這個數 \(\bmod m\) 的值,一定恰一人是對的。
agc004F
圖是樹或基環樹。
相鄰點處理容易想到二分圖,樹就是二分圖。
黑白染色,則同時變色等價於交換異色點位置。這順帶說明了黑白點個數必須相同。對於一條樹邊,若其子樹內黑白點的差距為 \(t\),則這條邊必須至少被經過 \(|t|\),答案下限為 \(\sum |t|\)。
接著是基環樹。如果環是偶環,列舉斷邊,相當於
CF1450C2
經典題。
把圖三染色,一定有一種方法的目標次數不超過 \(k/3\)。
TopCoder13366
不存在四元環。如果存在的話根據連邊方式可以證矛盾。
環的期望數量是每兩個點形成環的機率的和。算一下就行了。
AtCoder-codefestival_2016_final_g
Krustal 的過程中,邊被排序,從小到大試圖勾通兩個連通塊。
當考慮到 \((A, B+1, C+1)\) 時 \((A, B, C)\) 一定被考慮過,轉而考慮 \((B, B+1, C+1)\) 是不劣的。
因此現在有兩種邊,一種邊只有 \(O(m)\) 條,另一種邊只出現在相鄰兩個點間,邊權遞增。
Krustal 時,若考慮到 \((A, A+1, C)\) 時已連通,可以放棄所有 \((A+i, A+i+1, C+i)\),因為使 \((A, A+1, C)\) 連通的方案整體右移就可以得到不劣的 \(A+i \to A+i+1\) 的方案。
另一個方法是跑兩圈 dp 更新相鄰兩條邊的最小值。複雜度瓶頸並不在此。