「每日一题-10.20」cf 1063C
Posted moerblack
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「每日一题-10.20」cf 1063C相关的知识,希望对你有一定的参考价值。
题目链接: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的主要内容,如果未能解决你的问题,请参考以下文章