F. Interacdive Problem(二分&交互)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了F. Interacdive Problem(二分&交互)相关的知识,希望对你有一定的参考价值。
F. Interacdive Problem(二分&交互)
考虑二分 x ( m o d n ) x\\pmodn x(modn) 的值。
当前二分区间为 [ l , r ] [l,r] [l,r],表示 x ( m o d n ) x\\pmodn x(modn) 的值范围在 [ n − r , n − l ] [n-r,n-l] [n−r,n−l]之间。
所以初始区间为 [ l , r ] = [ 1 , n ] [l,r]=[1,n] [l,r]=[1,n]
每次就查询 + n − m i d +\\quad n-mid +n−mid
若 a n s > p r e ans>pre ans>pre 说明范围 在 [ m i d , r ] [mid,r] [mid,r]
否则在 [ l , m i d ] [l,mid] [l,mid]之间。
然后更新区间 [ l , r ] = [ l + n − m i d , r + n − m i d ] [l,r]=[l+n-mid,r+n-mid] [l,r]=[l+n−mid,r+n−mid]
a n s = p r e s ans=pres ans=pres。
#include <bits/stdc++.h>
#define int long long
#define mp make_pair
#define x first
#define y second
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
typedef long double ld;
typedef long long ll;
using namespace std;
mt19937 rnd(143);
const int inf = 1e10;
const int M = 998244353;
const ld pi = atan2(0, -1);
const ld eps = 1e-4;
signed main()
int n;
cin >> n;
int l = 1, r = n;
int div = 0;
while(r - l > 1)
int mid = (r + l) / 2;
cout << "+ "<< n - mid << endl;
int d;
cin >> d;
if(d > div)l = mid;
else r = mid;
l = (l + n - mid) % n;
r = (r + n - mid) % n;
if(r == 0) r = n;
div = d;
cout << "! " << div * n + l;
return 0;
以上是关于F. Interacdive Problem(二分&交互)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces1624 F. Interacdive Problem(交互,牛逼二分)
Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图性质