节操大师 北方大学生程序设计竞赛 南开大学
Description
MK和他的小伙伴們(共n人,且保證n為2的正整數冪)想要比試一下誰更有節操,于是他們組織了一場節操淘汰賽。他們的比賽規則簡單而暴力:兩人的節操正面相撞,碎的一方出局,而沒碎的一方晉級(腦補一下端午節的碰雞蛋游戲>_<)。最后經過數輪淘汰決出冠軍“節操大師”。
通過理性的研究,你測算出他們的節操值分別為1,2,...,n,我們不妨稱這個值為“硬度”吧。同時你又測出了一個節操常數k:當兩個硬度相差超過k的節操相撞時,硬度小的節操必碎;而當兩個硬度相差不超過k的節操相撞時,由于現場操作的不確定因素,兩個節操都有碎的可能(當然我們假設不會出現兩邊都碎的情況囧)。
顯然,節操值較低的人也許沒有任何可能得到冠軍。下面就請你預測,這次比賽的冠軍“節操大師”的節操最小值為多少。
Input
輸入只有一行,兩個正整數n和k分別表示參賽人數和節操常數。
Output
輸出一行,一個正整數,表示“節操大師”的節操最小值。
Sample Input
8 2
Sample Output
3
Hint
對20%數據,n≤16;
對50%數據,n≤4096;
對100%數據,n≤131072, 保證n為2的正整數冪,k<n。
Source
Nankai UniversityFreshman Programming Contest 2015
題解:這道題目很有意思,兩兩相撞,當節操差大于k時,節操小的必碎,否則的話,兩個都可能碎(一次碰撞只能碎一個)
我們采用二分答案的方法,對于每一個答案ans,我們判斷它能否形成一個競賽樹(自頂向下生成,也就是逆向思考)在考慮最后一輪對撞的時候
必然有ans與x對撞,其中ans >= x 或者是x - ans <= k因為只有這樣才有可能選上,我們貪心地對于ans選取比ans大,且ans可能戰勝的最大的x,如果不滿足的話,我們就選取第二大的x。。。。依次類推,這樣的話我們可以保證ans總是發揮了它最大的能力,這樣的話最有可能構成一個完全二叉樹,如果不能構成完全二叉樹,說明這個答案不合適
總結
以上是生活随笔為你收集整理的节操大师 北方大学生程序设计竞赛 南开大学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怪物猎人物语2怪物猎人物语2蛋图鉴高清
- 下一篇: 聊一聊电脑写作和手机写作