cf1104d二分+数学

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1104d二分+数学相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

bool ask(int x,int y){
    printf("? %d %d
",x,y);
    fflush(stdout);
    char buf[4];
    scanf("%s",buf);
    return buf[0]==x;
}

int work(){
    if(ask(0,1))return 1;
    int l=1,r,ans,mid;
    while(ask(l*2,l))l*=2;
    r=l*2+1,r=min(r,1000000000);
    while(l<=r){
        mid=l+r>>1;
        if(ask(mid,(mid+1)/2))//mid小于猜的数 
            l=mid+1;
        else ans=mid,r=mid-1;
    }
    return ans;
    
}

int main(){
    char cmd[32];
    while(1){
        scanf("%s",cmd);
        if(strcmp(cmd,"start")==0){
            printf("! %d
",work());
            fflush(stdout);
        }
        else break;
    }
} 

 

以上是关于cf1104d二分+数学的主要内容,如果未能解决你的问题,请参考以下文章

cf1059D. Nature Reserve(三分)

CF978C Letters前缀和+二分查找/几房几号

CF85 E Guard Towers——二分图

CF 1042 A Benches —— 二分答案(水题)

Salary Changing CF-1251D(二分)

CF1354E Graph Coloring(构造二分图+背包)