zoukankan      html  css  js  c++  java
  • Gym324843D

    Gym324843D

    交互,构造。

    题意:

    在106 * 106的平面中,存在n个点。

    你每次询问(x,y) 系统会高呼你一个D,为(x,y)到最近的点的距离的平方。

    每当你找到一个点的准确位置以后,当你继续查找时,系统不会再考虑这个点了。

    解:

    1.随便查询一个点(x,y),得到一个d

    2.继续查询以(x,y)为原心,sqrt(d)为半径的圆的上下左右四个点。

    3.在这个四个点中选用查询所得D最小的点,重复至第一步

    循环这个过程,D不断减小。

    #include <bits/stdc++.h>
    using namespace std;
    const long long N = 1000010;
    void in(long long &x){
        x=0;char c=getchar();
        long long y=1;
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
        x*=y;
    }
    
    void o(long long x){
        if(x<0){x=-x;putchar('-');}
        if(x>9)o(x/10);
        putchar(x%10+'0');
    }
    long long n;
    bool flag;// flag == true == 出现0 == 找到了点
    long long qur(long long x,long long y){//询问一次
        x=max(x,(long long)0);x=min((long long)1000000,x);//处理x边界
        y=max(y,(long long)0);y=min((long long)1000000,y);//处理y边界
        o(x);putchar(' ');o(y);cout<<endl;//查询
        long long res;in(res);
        if(res==0)flag=true;//找到了!
        return res;返回
    }
    long long a[N];
    map<long long,long long>mp;
    long long dx[10];
    long long dy[10];
    long long dis[10];
    void Q(){
        long long x=0,y=0;
        long long d = qur(x,y);if(flag)return;
        while(d!=0){//找圆上四个的
            long long dd = sqrt(d);
            dx[1]=-dd;dx[2]=dd;dx[3]=0;dx[4]=0;
            dy[1]=0;dy[2]=0;dy[3]=-dd;dy[4]=dd;
            for(long long i=1;i<=4;i++){
                dis[i]=qur(x+dx[i],y+dy[i]);if(flag)return;//查找并记录四个点的回复
            }
            //找到最后小的一个点
            long long mindd=dis[1];
            for(long long i=1;i<=4;i++){
                mindd=min(mindd,dis[i]);
            }
            //若没找到,重制(x,y),继续循环。
            for(long long i=1;i<=4;i++){
                if(mindd==dis[i]){
                    x+=dx[i];y+=dy[i];
                    x=max(x,(long long)0);x=min((long long)1000000,x);
                    y=max(y,(long long)0);y=min((long long)1000000,y);
                    break;
                }
            }
            d=mindd;
        }
    }
    signed main(){
        in(n);//读入
        while(n--){
            flag=false;//重制
            Q();//
        }
        return 0;
    }
    
  • 相关阅读:
    Redis系列(八)--缓存穿透、雪崩、更新策略
    Vue在单独引入js文件中使用ElementUI的组件
    解读浮动闭合最佳方案:clearfix
    JS replace()方法替换变量(可以对变量进行全文替换)
    Django media的设置
    使用EventBus实现兄弟组件之间的通信
    component: resolve => require(['../pages/home.vue'], resolve)
    vue中使用localStorage存储信息
    使用vue-router beforEach实现判断用户登录跳转路由筛选功能
    ES6使用常量做为函数名
  • 原文地址:https://www.cnblogs.com/yesuweiYYYY/p/14672057.html
Copyright © 2011-2022 走看看