CF1063C Dwarves, Hats and Extrasensory Abilities
CF1063C Dwarves, Hats and Extrasensory Abilities
題意:
首先題目會給出 n ,表示要輸入多少點。 然后你輸出n 個點的坐標,每輸出一個點會告訴你這個點的顏色是黑色或者白色。 最后你需要輸出兩個點的坐標代表一條直線,這條直線能夠將你剛剛給出的點分成兩份,一份全都是黑色的點,另一份全都是白色的點。
所有的點不能重疊,所有點不能和最后輸出的直線重疊,每個點的黑白是隨機給出的,你需要保證你輸出的數據有解并輸出解。
題解:
基本上交互都跟二分有關系
我一開始一點頭緒都沒有,但我們可以這樣想,我們可以在一條線上選黑白點,然后不斷詢問中點位置的顏色,不斷二分距離范圍。
就比如如果(0,0)是白色,下一次就問(1e9/2,0),如果是黑色,就問(1e9/2/2,0)是什么顏色,這樣二分找,可以將黑白分隔開,最后答案就是最后兩個黑白快的中點
log2(1e9)=29.897353,n最大30,有可能會被卡?我提交后還真是,在59這個點瘋狂被卡,我猜應該是二分到最后剛好用完沒地方了,導致最后答案與某個黑白塊重疊,這咋整?
我突然想到一個方法,我們最后的答案想的是二分最后一下,得到一個整數解,但題目要求你輸出的是直線,而這個直線與黑白所在直線的交點不用是整數點,所以我們可以輸出最后一個白塊下方的點,最后一個黑塊上方的點,這樣的直線也正好平分黑白點,而且不會占用整數點
代碼:
#include <bits/stdc++.h> #include <unordered_map> #define debug(a, b) printf("%s = %d\n", a, b); using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> PII; clock_t startTime, endTime; //Fe~Jozky const ll INF_ll= 1e18; const int INF_int= 0x3f3f3f3f; void read(){}; template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar) {x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...); } template <typename T> inline void write(T x) {if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0'); } void rd_test() { #ifdef ONLINE_JUDGE #elsestartTime = clock ();freopen("data.in", "r", stdin); #endif } void Time_test() { #ifdef ONLINE_JUDGE #elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC); #endif } map<int,int>mp; int main() {rd_test();int n;cin>>n;int l=0,r=1e9;printf("0 1\n");mp[0]=1;fflush(stdout);int lf=-1,f=-1,rf=-1;string s;cin>>s;if(s=="black")lf=0;else lf=1;for(int i=1;i<n;i++){int mid=l+r+1>>1;printf("%d 1\n",mid);fflush(stdout);mp[mid]=1;cin>>s;if(s=="black")f=0;else f=1;if(f==lf)l=mid;else if(f==rf)r=mid;else if(rf==-1){rf=f;r=mid;}}printf("%d %d %d %d\n",l,0,r,2);//Time_test(); }總結
以上是生活随笔為你收集整理的CF1063C Dwarves, Hats and Extrasensory Abilities的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挤眼睛嘴巴左右歪怎么回事?
- 下一篇: Codeforces Round #55