#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()); } |
English