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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

codeforces 1039B Subway Pursuit【二分+随机】

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces 1039B Subway Pursuit【二分+随机】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:戳這里

題意:一個點在[1,n]以內,我們可以進行4500次查詢,每次查詢之后,該點會向左或向右移動0~k步,請在4500次查詢以內找到該點。

解題思路:一邊二分,一邊隨機。

交互題似乎有好多是二分,上次交互題的二分調了好久,這次也是。我出數據水平又很低,所以至今不知道哪些數據可以卡哪些二分的寫法,只能改一次交一次。。。

1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <string> 5 #include <vector> 6 #include <map> 7 #include <cmath> 8 #include <iostream> 9 #include <random> 10 #include <ctime> 11 using namespace std; 12 typedef long long ll; 13 const int maxn = 1e6 + 10; 14 char ans[11]; 15 bool ask(ll l, ll r) 16 { 17 //printf("$$$$"); 18 printf("%lld %lld\n", l, r); 19 fflush(stdout); 20 scanf("%s", ans); 21 if(ans[0] == 'Y') 22 { 23 if(l == r) exit(0); 24 else return 1; 25 } 26 else return 0; 27 } 28 int na[maxn]; 29 int main() 30 { 31 ll n, k; 32 srand(time(NULL)); 33 scanf("%lld %lld", &n, &k); 34 ll l = 1, r = n; 35 while(l <= r) 36 { 37 ll mid = l + (r - l) / 2; 38 if(ask(l, mid)) 39 { 40 r = mid;//注意這點,我的理解是mid可能就是我們要找的點,如果用常規寫法r=mid-1會把這個點跳過去 41 //但我試了幾個樣例,發現在區間不斷變化且有隨機數的情況下,及時r=mid-1也能找到答案。。 42 } 43 else 44 { 45 l = mid + 1; 46 } 47 l = max(1ll, l - k); 48 r = min(n, r + k); 49 mid = l + rand()%(r - l + 1); 50 ask(mid, mid); 51 l = max(1ll, l - k); 52 r = min(n, r + k); 53 } 54 return 0; 55 } View Code

?

轉載于:https://www.cnblogs.com/zmin/p/9606685.html

總結

以上是生活随笔為你收集整理的codeforces 1039B Subway Pursuit【二分+随机】的全部內容,希望文章能夠幫你解決所遇到的問題。

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