最小相似度
題目大意:對於位數相同的兩個二進位制串,sim(a,b)為它們的相似度,也就是a^b中0的個數。現在給定一堆串,找出乙個t使得max最小,不過不用輸出t,只需要輸出那個最小值
正解應該是fwt,不過沒學過,所以也沒做出來,而給出的題解的是用bfs做的,還真沒想到能夠用搜尋做,剛開始看也不理解,不過研究了一下還是,挺好理解的。
首先,也是為什麼可以用bfs的一點,就是串的長度最大只到20,也就是220=1048576種狀態,可以通過bfs來遍歷,那接下來怎麼搜,搜什麼呢?
相似度是a^b中0的個數,但0的個數我們並不好控制,但我們可以控制1的個數,也就是不相似度usim。像(1那為什麼這樣可以使,答案剛好是跟多個串的不相似度中的最大的呢?像a=111,b=001的話,a的最大不相似的串是000,但a要第3層才能遍歷到000,b第1層就能遍歷到000,這樣像兩邊往中間逼近一樣,能遍歷到的最大的那個不相似度就是對於所有串來說的最大不相似度
最後,再拿長度減去最大不相似度就可以得到最小相似度了,詳情見**
1 #include2 #include3 #include4再偷懶就就就自己打自己using
namespace
std;
5const
int n=1
<<21;6
char s[28];7
intn,m,usim[n];
8int
main()924
}25int ans=0;26
while(!q.empty())
2740}41
}42 printf("
%d\n
",m-ans);
43return0;
44 }
牛客練習賽 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 最小,只...