日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

节操大师 北方大学生程序设计竞赛 南开大学

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 节操大师 北方大学生程序设计竞赛 南开大学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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總是發揮了它最大的能力,這樣的話最有可能構成一個完全二叉樹,如果不能構成完全二叉樹,說明這個答案不合適


#include <iostream> #include <set> #include <cstdio> #include <vector> using namespace std; int n,k; bool check(int x) {set<int> st;vector<int> vec;vec.push_back(-x);for(int i = 1;i <= n;i++)if(i != x)st.insert(-i);while(vec.size() != n){int s = vec.size();for(int i = 0;i < s;i++){int v = vec[i];auto np = st.lower_bound(v - k);int y = *np;if(np != st.end()){vec.push_back(y);//st.erase(y);}elsereturn false;}}return true; } int main() {scanf("%d%d",&n,&k);int l = 1,r = n + 1;while(l < r){int mid = (l+r)/2;if(!check(mid)) l = mid + 1;else r = mid ;}cout<<l<<endl; }



總結

以上是生活随笔為你收集整理的节操大师 北方大学生程序设计竞赛 南开大学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。