Codeforces Round #716 (Div. 2) D(随机算法)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #716 (Div. 2) D(随机算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Codeforces Round #716 (Div. 2) D
題意:區間查詢,問區間最少能分成幾部分使得最多的數不超過總數的一半 向上取整。
思路:找到區間的總數s,如果不超過一半的話就是一部分。超過一半的話,那我們只要考慮超過一半的那一個數怎么組合,超過一半的數為f,那f和其他一個數組合,剩下的f就單獨,用貪心的思想可以看出這是最優的,那么答案就是 2*ans-(r-l+1);那我們怎么求眾數呢,可以用莫隊,分塊,線段樹,這里還可以用隨機算法,因為f是超過一半的,那我們隨機 k次 ,可以隨機不到f的概率是 (1/2)^k ,當k等于 40 50 的時候 這個概率是幾乎不可能的。
總結
以上是生活随笔為你收集整理的Codeforces Round #716 (Div. 2) D(随机算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交叉表查询中的多列显示
- 下一篇: 牛客挑战赛30 C 小G砍树 换根dp+