Contest 987

A

開個 map 記錄一下。數組

時間複雜度 \(O\left(1\right)\)spa

B

根據咱們的常識,在正整數範圍內,除了如下幾個特例,其它狀況都是指數較大值較大。code

  • \(2^4=4^2\)
  • \(1^x<x^1\left(x>1\right)\)
  • \(2^3<3^2\)

而後就作完了,時間複雜度 \(O\left(1\right)\)class

C

樹狀數組裸題,枚舉中間點。遍歷

若是拓展到四個或更多位置的話用個 DP \(f_i,j\) 表示第 \(i\) 個位置強制,目前選了 \(j\) 個位置的最小值。而後用樹狀數組一樣維護 \(j-1\) 的狀況就行了。map

時間複雜度 \(O\left(n\log n\right)\)im

D

發現 \(k\) 很小,考慮從它入手。img

以每種商品做爲起點 BFS(注意可能有多個起點),這樣就能算出每一個點到每種商品的最短距離。di

而後對於每一個點取出最近的 \(s\) 種貨物就行了,時間複雜度 \(O\left(km+ns\log s\right)\)時間

E

策神的題的弱化版。

交換顯然會更改逆序對個數的奇偶性,但可不能夠作到線性呢?

首先題目中進行的操做次數都是 \(O\left(n\right)\) 級別的(雖然沒什麼用),這啓發咱們能夠模擬交換的過程。

咱們枚舉每個 \(i\),若是 \(a_i\not=i\) 就交換 \(a_{a_i}\)\(a_i\)

直接理解起來可能會有一點點抽象,畫個圖來看看。

由於是個排列,因此 \(i\)\(a_i\) 連邊會造成一個個有向環。

每次交換咱們都會使得 \(a_{a_i}=a_i\),此後 \(a_i\) 位置不會再進行交換。

由於一共有 \(n\) 個數,因此最多交換 \(n\) 次。

時間複雜度 \(O\left(n\right)\)

F

雖然邊數不少(同枚舉子集的 \(3^n\) 級別),但咱們並不關注具體的連邊狀況,咱們只關心連通問題。

考慮創建 \(2^n\) 個輔助點,向它們子集中 \(1\) 個數剛好\(1\) 的點連邊。

好比說 \(\texttt{1101}\) 就向 \(\texttt{0101 1001 1100}\) 連邊。

固然給定的 \(m\) 個點都要向 \(\left(2^n-1\right)\oplus a_i\) 連邊。

而後這個連通性又比較優美,每次 dfs 下去確定能遍歷到整個連通塊。

因此訪問過的點就不用訪問了,總時間複雜度 \(O\left(2^n\times n\right)\)

本質是經過分層的方式在保證連通的狀況下縮減了多餘的邊數。

相關文章
相關標籤/搜索