模擬24

T1

容易發現選擇\(r\)一定是很優的,因爲兩個數沒有任何限制,選擇\(r\)之後只需要儘量去把剩餘的二進制位上的\(0\)補成\(1\)就完了。

T2

想到了折半搜索但是不會拼起來,發現了答案是將某個前綴的概率都減去後恰好小於等於0,然後就不會搞了,實際上可以二分這個前綴的位置,然後看能不能取出合法的解滿足二分的答案。

T3

沒有限制的答案十分好求,考慮減去不合法的答案,不合法的一定是三元環上的點。

做法是,將圖重新連有向邊,入度大的向入度小的連邊,入度一樣則按照編號小的向編號大的連邊,考慮這樣做爲什麼是對的。

圖中的點可以只分成兩類,一類是度數大於\(\sqrt m\)的點,重構圖之後,這類點的入邊不會超過\(\sqrt m\)個,因爲即使這個點的度數恰好爲\(\sqrt m\),也最多隻有根號條入邊,出邊不會超過\(m\)條,顯然,枚舉的時間複雜度\(m\sqrt m\),另一類是度數不大於\(\sqrt m\)的點,這類點的入邊最多\(m\)條,出邊不超過\(\sqrt m\),所以總時間複雜度爲\(m\sqrt m\)

爲什麼這樣做會更優,因爲這樣枚舉出的三元環只要枚舉一次,而暴力每個三元環都要枚舉三次,所以不是很優。

T4

這種跟最大值有關係的一般要考慮單調棧或單調隊列。

假設是一個序列,那麼如果兩個點有貢獻當且僅當兩個點之間沒有比他們大的點,維護單調遞減棧。

環要怎麼辦呢?應該是要斷環成鏈不然考慮的東西很多,但是即使斷了也要考慮很多,不過有一個位置是所有序列都跨不過去的,就是最大值的位置,所以將它作爲起點然後斷開最後單獨考慮最大值是右端點的情況就完了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章