码迷,mamicode.com
首页 > 其他好文 > 详细

「每日一题-10.20」cf 1063C

时间:2018-10-20 23:42:27      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:直线   image   攻击   ems   iostream   第一个   链接   problem   坐标   

题目链接:https://codeforces.com/problemset/problem/1063/C

第一次做交互......交互,顾名思义就是与电脑互动。并不是在开始时就读入所有数据,而是在程序中进行读入与输出。

题意大概就是在一个二维平面上,告诉你点数,点分黑白两种。你需要在电脑告诉你每个点的颜色之前,定好这个点的位置(依次)。

并在最后,需要做出一根划分黑白阵营的直线。

技术分享图片

重点在于在得知颜色之前需要定好坐标。由于是自己决定坐标,所以可以把所有点放在一维上,这里就假设点都在直线x=1上。

黑白点肯定要分在一根线的两端,这样一来,就想到了二分。

假设第一个预测的点是黑色的,那就把直线的较下端作为黑色阵营。要是当前点与第一个点颜色相同,那么就让L变成mid,否则就让R变成mid。

每次需要更新mid,这样的过程可以看成黑白两方阵营互相攻击,并且尽可能地扩大自己的领地。这样就会显得简单一些。

最后,需要给出一条直线上的两个坐标。由于L和R是越缩越接近,所以给出(0,L) (1,R)即可。

 

 

Code:

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int n,x,y,mid,l,r,pre;
 5 string s;
 6 int main(){
 7     ios::sync_with_stdio(false);
 8     cin>>n;
 9     r=1e9;
10     for(int i=1;i<=n;++i) {
11         cout<<"1 "<<mid<<endl;
12         cin>>s;
13         if(i==1) pre=s[0];
14         if(s[0]==pre) l=mid;
15         else r=mid;
16         mid=((long long)l+(long long)r)>>1; 
17     }
18     cout<<"0 "<<l<<"2 "<<r<<endl;
19 } 

 

「每日一题-10.20」cf 1063C

标签:直线   image   攻击   ems   iostream   第一个   链接   problem   坐标   

原文地址:https://www.cnblogs.com/moerblack/p/9823366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!