#include "cielib.h" #include <bits/stdc++.h> using namespace std; int get_sigma(int a, int b) { const int len = b-a; if( len == 1 ) return 0; return (len+1)/2; } pair<int, int> get_guesses(int a, int b) { if(a+1 != b) return {b, a}; if(a == 0) return {b+1, a}; else return {a-1, b}; } void update_corners(int &a, int &b, const int answer, const int sigma) { if(sigma > 0) { if(answer == 1) b = a+sigma; else a = b-sigma; } else { if( a==0 and answer == 1 or a != 0 and answer == 0 ) b = a; else a = b; } } int main() { int d = podajD(); int r = podajR(); vector<int> corner1(d, 0); vector<int> corner2(d, r); while(corner1.front() != corner2.front()) { vector<int> pnt(d); for(int i = 0; i < d; ++i) pnt[i] = (corner1[i]+corner2[i])/2; const int sigma = get_sigma(corner1[0], corner2[0]); for(int i = 0; i < d; ++i) { auto guess = get_guesses(corner1[i], corner2[i]); pnt[i] = guess.first; czyCieplo(pnt.data()); pnt[i] = guess.second; int answer = czyCieplo(pnt.data()); pnt[i] = (corner1[i]+corner2[i])/2; update_corners(corner1[i], corner2[i], answer, sigma); } } znalazlem(corner1.data()); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #include "cielib.h" #include <bits/stdc++.h> using namespace std; int get_sigma(int a, int b) { const int len = b-a; if( len == 1 ) return 0; return (len+1)/2; } pair<int, int> get_guesses(int a, int b) { if(a+1 != b) return {b, a}; if(a == 0) return {b+1, a}; else return {a-1, b}; } void update_corners(int &a, int &b, const int answer, const int sigma) { if(sigma > 0) { if(answer == 1) b = a+sigma; else a = b-sigma; } else { if( a==0 and answer == 1 or a != 0 and answer == 0 ) b = a; else a = b; } } int main() { int d = podajD(); int r = podajR(); vector<int> corner1(d, 0); vector<int> corner2(d, r); while(corner1.front() != corner2.front()) { vector<int> pnt(d); for(int i = 0; i < d; ++i) pnt[i] = (corner1[i]+corner2[i])/2; const int sigma = get_sigma(corner1[0], corner2[0]); for(int i = 0; i < d; ++i) { auto guess = get_guesses(corner1[i], corner2[i]); pnt[i] = guess.first; czyCieplo(pnt.data()); pnt[i] = guess.second; int answer = czyCieplo(pnt.data()); pnt[i] = (corner1[i]+corner2[i])/2; update_corners(corner1[i], corner2[i], answer, sigma); } } znalazlem(corner1.data()); } |