加载中...

二分

二分 https://atcoder.jp/contests/abc269/tasks/abc269_e
你可以询问 x属于(a,b) y属于(c,d) 的(x,y)的方格里有多少个放了把数码的皇后
解: 直接二分 x属于1-mid y属于1-n 问问是不是满足1-mid每一行都有格子是的话就得往mid+1 -r找

int n,x,y;
inline bool checky(int a,int b,int c,int d){
    cout<<"? "<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
    int num;cin>>num;
    if((d-c+1)==num) return false;
    else return true;
}
inline bool checkx(int a,int b,int c,int d){
    cout<<"? "<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
    int num;cin>>num;
    if((b-a+1)==num) return false;
    else return true;
}
inline void bsx(){
    int l=1,r=n;
    while (l < r){
        int mid = l + r >> 1;
        if (checkx(1,mid,1,n)) r = mid;
        else l = mid + 1;
    }
    x=l;
}
inline void bsy(){
    int l=1,r=n;
    while (l < r){
        int mid = l + r >> 1;
        if (checky(1,n,1,mid)) r = mid;
        else l = mid + 1;
    }
    y=l;
}
int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);std::cout.tie(0);
    cin>>n;
    bsx();bsy();
    cout<<'!'<<' '<<x<<' '<<y<<endl;
}

posted @ 2022-09-19 17:26  liang302  阅读(52)  评论(0编辑  收藏  举报