博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EOJ Monthly 2019.2 A. 回收卫星
阅读量:5097 次
发布时间:2019-06-13

本文共 2629 字,大约阅读时间需要 8 分钟。

题意:

 你可以询问一个三维坐标,机器会告诉你这个坐标在不在目标圆中,

 并且(0,0,0)是一定在圆上的,叫你求出圆心坐标

 

思路:

 因为(0,0,0)一定在圆上,所以我们可以把圆心分成3个坐标轴上

 就是求x的时候,其他坐标都为0,而且可以确定一个在x的正半轴,一个

在负半轴,所以我们可以二分求出

另外注意数据(l+r)是数据会超过long long

 

代码:

#include
using namespace std;typedef long long ll;const ll INF=4e9;void ask(ll x,ll y,ll z){ printf("0 %lld %lld %lld\n",x,y,z); fflush(stdout);}ll xx0(){ ll l=-INF,r=0; ll op,ans; while(l<=r) { ll mid=(l+r)>>1; ask(mid,0,0); scanf("%d",&op); if(op==0) l=mid+1; else r=mid-1,ans=mid; } return ans;}ll xx1(){ ll l=0,r=INF; ll op,ans; while(l<=r) { ll mid=l+r>>1; ask(mid,0,0); scanf("%d",&op); if(op==0) r=mid-1; else l=mid+1,ans=mid; } return ans;}ll yy0(){ ll l=-INF,r=0; ll op,ans; while(l<=r) { ll mid=l+r>>1; ask(0,mid,0); scanf("%d",&op); if(op==0) l=mid+1; else r=mid-1,ans=mid; } return ans;}ll yy1(){ ll l=0,r=INF; ll op,ans; while(l<=r) { ll mid=l+r>>1; ask(0,mid,0); scanf("%d",&op); if(op==0) r=mid-1; else l=mid+1,ans=mid; } return ans;}ll zz0(){ ll l=-INF,r=0; ll op,ans; while(l<=r) { ll mid=l+r>>1; ask(0,0,mid); scanf("%d",&op); if(op==0) l=mid+1; else r=mid-1,ans=mid; } return ans;}ll zz1(){ ll l=0,r=INF; ll op,ans; while(l<=r) { ll mid=l+r>>1; ask(0,0,mid); scanf("%d",&op); if(op==0) r=mid-1; else l=mid+1,ans=mid; } return ans;}int main(){ ll x0,y0,x1,y1,z0,z1; x0=xx0(); x1=xx1(); y0=yy0(); y1=yy1(); z0=zz0(); z1=zz1(); printf("1 %lld %lld %lld\n",(x0+x1)/2,(y0+y1)/2,(z0+z1)/2); return 0;}
View Code
#include
#define ll long longusing namespace std;const ll INF=2e9;ll a[5];void ask(int tp,int m) { for(int i=1; i<=3; i++)a[i]=0; a[tp]=m; printf("0 %lld %lld %lld\n",a[1],a[2],a[3]); fflush(stdout);}ll go(int tp) { ll l=0,r=INF,mid,ans1=0,ans2=0; int op; while(l<=r) { mid=l+(r-l)/2; ask(tp,mid); scanf("%d",&op); if(op)l=mid + 1,ans1 = mid; else r=mid - 1; } l=-INF,r=0; while(l<=r) { mid=l+(r-l)/2; ask(tp,mid); scanf("%d",&op); if(op)r=mid-1,ans2 = mid; else l=mid+1; } return (ans1+ans2)/2;}int main() { ll x,y,z; x=go(1); y=go(2); z=go(3); printf("1 %lld %lld %lld\n",x,y,z); return 0 ;}
View Code

 

转载于:https://www.cnblogs.com/zhgyki/p/10455617.html

你可能感兴趣的文章
IO—》Properties类&序列化流与反序列化流
查看>>
jquery实现限制textarea输入字数
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
ActiveMQ与spring整合
查看>>
第一阶段冲刺06
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
排球积分程序(三)——模型类的设计
查看>>
HDU 4635 Strongly connected
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
关于TFS2010使用常见问题
查看>>
URL编码与解码
查看>>
Eclipse 安装SVN插件
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>