ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 C. Colder-Hotter
题意:交互题。
有一个坐标 X,Y,你可以进行询问,每一次询问,他都会返回0/1,如果你的点比上一个点接近生成坐标,则会返回1,否则0
分析:显然是先确定x坐标,在确定y的坐标。
联想到距离公式,三分即可
1 /** 2 Create By yzx - stupidboy 3 */ 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <cmath> 8 #include <deque> 9 #include <vector> 10 #include <queue> 11 #include <iostream> 12 #include <algorithm> 13 #include <map> 14 #include <set> 15 #include <ctime> 16 #include <iomanip> 17 using namespace std; 18 typedef long long LL; 19 typedef double DB; 20 #define MIT (2147483647) 21 #define INF (1000000001) 22 #define MLL (1000000000000000001LL) 23 #define sz(x) ((int) (x).size()) 24 #define clr(x, y) memset(x, y, sizeof(x)) 25 #define puf push_front 26 #define pub push_back 27 #define pof pop_front 28 #define pob pop_back 29 #define ft first 30 #define sd second 31 #define mk make_pair 32 33 inline int Getint() 34 { 35 int Ret = 0; 36 char Ch = ' '; 37 bool Flag = 0; 38 while(!(Ch >= '0' && Ch <= '9')) 39 { 40 if(Ch == '-') Flag ^= 1; 41 Ch = getchar(); 42 } 43 while(Ch >= '0' && Ch <= '9') 44 { 45 Ret = Ret * 10 + Ch - '0'; 46 Ch = getchar(); 47 } 48 return Flag ? -Ret : Ret; 49 } 50 51 int ans[2]; 52 53 bool Check(int x, int y, int w) 54 { 55 static int tmp[2]; 56 int ret; 57 tmp[w] = x, tmp[w ^ 1] = ans[w ^ 1]; 58 //printf("%d %d\n", tmp[0], tmp[1]); 59 cout << tmp[0] << ' ' << tmp[1] << endl; 60 //scanf("%d", &ret); 61 cin >> ret; 62 tmp[w] = y; 63 //printf("%d %d\n", tmp[0], tmp[1]); 64 cout << tmp[0] << ' ' << tmp[1] << endl; 65 //scanf("%d", &ret); 66 cin >> ret; 67 return ret; 68 } 69 70 inline void Work(int w) 71 { 72 int left = 0, right = INF - 1; 73 while(right - left + 1 > 3) 74 { 75 int d = (right - left) / 3; 76 int x = left + d; 77 int y = right - d; 78 bool better = Check(x, y, w); 79 if(better) left = x; 80 else right = y; 81 } 82 int ret = right; 83 for(int i = left; i < right; i++) 84 { 85 bool better = Check(i, i + 1, w); 86 if(!better) 87 { 88 ret = i; 89 break; 90 } 91 } 92 ans[w] = ret; 93 } 94 95 inline void Solve() 96 { 97 //printf("0 0\n"); 98 ans[1] = 0; 99 Work(0); 100 Work(1); 101 102 cout << "A " << ans[0] << ' ' << ans[1] << endl; 103 //printf("A %d %d\n", ans[0], ans[1]); 104 } 105 106 int main() 107 { 108 //freopen("", "r", stdin); 109 Solve(); 110 return 0; 111 }

浙公网安备 33010602011771号