題目鏈結
\(\text\)
首先考慮我們到底要求啥,實際就是要快速求出對於乙個數 \(x,\) 所有數與它異或後的sim
值。
一種 ***** 的想法是直接列舉 \(t,\) 顯然複雜度**,因為 \(n\) 太大了,是 \(o(2^m\times n)\) 的。
考慮把 \(n\) 乾掉,倒著想。題目的描述引導我們去二分答案。
設當前答案是 \(mid,\) 目標就是看是否存在乙個 \(x\) 滿足最大 sim 不超過 \(x.\)
考慮設 \(f_x\) 表示 \(x\) 在二進位制下 \(0\) 的個數,尋找乙個逆向的突破口:
不能直接列舉 \(x,\) 考慮什麼情況下我們可以知道存在這樣乙個 \(x.\)
那麼發現,每個數 \(v_i\) 在經過變換後的值就是 \(v_i\text x,\) 那不妨從這個最終狀態出發。
考慮預處理出所有二進位制下 \(0\) 的個數等於 \(i\) 的數,那麼設 \(g_x\) 表示 \(x\) 這個數是否有貢獻,那麼把 \(cnt\leq mid\) 的貢獻都算上,現在我們就有了兩個多項式:
\[f,g
\]那麼設 \(c,c_x=\sum_j=x}f_i\times g_j\)
那麼存在乙個 \(x\) ,就意味著 \(c_x=n,\) 因為這就等價於它對每個數都有貢獻。
從上述做法就可以二分答案了。複雜度 \(o(m2^m\times \log m)\)
牛客練習賽 41 D 最小相似度 BFS
題意 定義兩個位數相等的二進位制串的相似度sim a,b 二進位制串中a b中0的個數 sim left a,b right texta oplus b text sim a,b 二進位制串中a b中0的個數 給定n nn個長度為m mm的二進位制串。現在的問題是找出乙個額外的長度為m mm的二進位...
牛客練習賽41 D 最小相似度(BFS)
思路 m最大只有20,如果把每個二進位制串看成乙個狀態,最多只有2 20 1048576個狀態,可以暴力搜尋。如果我們把某個串改變1位,這個改變後的串和這個串的答案就是m 1,比如01001,隨便改變1位變成01000,01001 01000 00001 答案就是m 1。我們要找的是m x的最小值,...
牛客練習賽41 D 最小相似度 思維 bfs
傳送門 給定nn n個長m mm位的二進位制串 求乙個二進位制串t tt,定義val ival i vali 是t tt與第i ii個二進位制串相同的位數 使得m ax val 1,va l2.va ln max val 1,val 2.val n max va l1 val2 val n 最小,只...