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] [nr,nl]之间。

所以初始区间为 [ l , r ] = [ 1 , n ] [l,r]=[1,n] [l,r]=[1,n]

每次就查询 + n − m i d +\\quad n-mid +nmid

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+nmid,r+nmid]

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(交互,牛逼二分)

F. Bakkar In The Army 二分

Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图性质

CF981 F. Round CF(二分+Hall定理)

Codeforces1537 F. Figure Fixing(思维,二分图染色)

CodeForces961 F. k-substrings 字符串哈希+二分