「每日一題-10.20」cf 1063C
阿新 • • 發佈:2018-10-21
image com 做出 force 並且 劃分 with using 當前
題目鏈接: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); 8cin>>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 } 18cout<<"0 "<<l<<"2 "<<r<<endl; 19 }
「每日一題-10.20」cf 1063C