// Michał Wiatrowski
#include <iostream>
#include <vector>
#include "cielib.h"
using namespace std;
int main() {
int d, r, k;
d = podajD();
r = podajR();
k = podajK();
int len = r + 1;
vector<pair<int, int>> zakresy(d, make_pair(0, r));
vector<int> pos(d);
while (len > 3) {
for (int i = 0; i < d; ++i) {
for (int j = 0; j < d; ++j)
pos[j] = (zakresy[j].first + zakresy[j].second) / 2;
int half_len = (len + 1) / 2;
pos[i] = zakresy[i].first;
czyCieplo(pos.data());
pos[i] = zakresy[i].second;
if (czyCieplo(pos.data()))
zakresy[i].first = zakresy[i].second - half_len;
else
zakresy[i].second = zakresy[i].first + half_len;
}
len = zakresy[0].second - zakresy[0].first + 1;
// cerr << "koncze runde, len = " << len << endl;
// for (int i = 0; i < d; ++i)
// cerr << i << ": " << zakresy[i].first << "-" << zakresy[i].second << endl;
}
vector<int> wynik(d);
for (int i = 0; i < d; ++i) {
for (int j = 0; j < d; ++j)
pos[j] = (zakresy[j].first + zakresy[j].second) / 2;
auto delta = [](int first, int second) {
if (!first && !second)
return 0;
if (first)
return -1;
if (second)
return 1;
};
int a = 1, b = 1, c = 1;
czyCieplo(pos.data());
pos[i] -= 1;
int dl1 = czyCieplo(pos.data());
pos[i] += 1;
int dl2 = czyCieplo(pos.data());
a += delta(dl1, dl2);
pos[i] += 1;
int dr1 = czyCieplo(pos.data());
pos[i] -= 1;
int dr2 = czyCieplo(pos.data());
c += delta(dr1, dr2);
if (a < c)
wynik[i] = pos[i] - 1;
else if (a > c)
wynik[i] = pos[i] + 1;
else if (a == c)
wynik[i] = pos[i];
}
znalazlem(wynik.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 76 77 78 79 80 81 82 | // Michał Wiatrowski #include <iostream> #include <vector> #include "cielib.h" using namespace std; int main() { int d, r, k; d = podajD(); r = podajR(); k = podajK(); int len = r + 1; vector<pair<int, int>> zakresy(d, make_pair(0, r)); vector<int> pos(d); while (len > 3) { for (int i = 0; i < d; ++i) { for (int j = 0; j < d; ++j) pos[j] = (zakresy[j].first + zakresy[j].second) / 2; int half_len = (len + 1) / 2; pos[i] = zakresy[i].first; czyCieplo(pos.data()); pos[i] = zakresy[i].second; if (czyCieplo(pos.data())) zakresy[i].first = zakresy[i].second - half_len; else zakresy[i].second = zakresy[i].first + half_len; } len = zakresy[0].second - zakresy[0].first + 1; // cerr << "koncze runde, len = " << len << endl; // for (int i = 0; i < d; ++i) // cerr << i << ": " << zakresy[i].first << "-" << zakresy[i].second << endl; } vector<int> wynik(d); for (int i = 0; i < d; ++i) { for (int j = 0; j < d; ++j) pos[j] = (zakresy[j].first + zakresy[j].second) / 2; auto delta = [](int first, int second) { if (!first && !second) return 0; if (first) return -1; if (second) return 1; }; int a = 1, b = 1, c = 1; czyCieplo(pos.data()); pos[i] -= 1; int dl1 = czyCieplo(pos.data()); pos[i] += 1; int dl2 = czyCieplo(pos.data()); a += delta(dl1, dl2); pos[i] += 1; int dr1 = czyCieplo(pos.data()); pos[i] -= 1; int dr2 = czyCieplo(pos.data()); c += delta(dr1, dr2); if (a < c) wynik[i] = pos[i] - 1; else if (a > c) wynik[i] = pos[i] + 1; else if (a == c) wynik[i] = pos[i]; } znalazlem(wynik.data()); } |
English