#include <stdio.h>
#include <utility>
#include <vector>
#include "cielib.h"
int main() {
long d = podajD();
long k = podajK();
long r = podajR();
std::vector<bool> ready(d, false);
long ready_amount = 0;
std::vector<int> coordinates(d, r/2);
std::vector<std::pair<int, int>> b_search(
d,
std::pair<int, int>(0, r)
);
czyCieplo(&coordinates[0]);
while(ready_amount != d) {
for(int i=0; i<d; i++) {
if (!ready[i]) {
int middle = coordinates[i];
std::vector<int> left(coordinates);
std::vector<int> right(coordinates);
left[i] = b_search[i].first;
right[i] = b_search[i].second;
bool is_odd = (b_search[i].second - b_search[i].first)%2;
if (right[i] - left[i] <= 2) {
ready[i] = true;
ready_amount++;
if (czyCieplo(&left[0])) {
coordinates[i] = left[i];
} else if (czyCieplo(&right[0])) {
coordinates[i] = right[i];
} else if (czyCieplo(&left[0])) {
coordinates[i] = left[i];
}
} else {
if (czyCieplo(&left[0])) {
b_search[i].second = middle;
} else if (czyCieplo(&right[0])) {
b_search[i].first = middle;
if (is_odd) {
b_search[i].first++;
}
} else if(czyCieplo(&left[0])) {
b_search[i].second = middle;
} else {
if (is_odd) {
b_search[i].first = middle;
} else {
ready[i] = true;
ready_amount++;
}
}
}
if (b_search[i].second - b_search[i].first == 1) {
if (b_search[i].first)
b_search[i].first--;
else
b_search[i].second++;
}
}
}
for(int i=0; i<d; i++) {
if (!ready[i]) {
coordinates[i] = (b_search[i].first + b_search[i].second)/2;
}
}
czyCieplo(&coordinates[0]);
}
znalazlem(&coordinates[0]);
return 0;
};
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 | #include <stdio.h> #include <utility> #include <vector> #include "cielib.h" int main() { long d = podajD(); long k = podajK(); long r = podajR(); std::vector<bool> ready(d, false); long ready_amount = 0; std::vector<int> coordinates(d, r/2); std::vector<std::pair<int, int>> b_search( d, std::pair<int, int>(0, r) ); czyCieplo(&coordinates[0]); while(ready_amount != d) { for(int i=0; i<d; i++) { if (!ready[i]) { int middle = coordinates[i]; std::vector<int> left(coordinates); std::vector<int> right(coordinates); left[i] = b_search[i].first; right[i] = b_search[i].second; bool is_odd = (b_search[i].second - b_search[i].first)%2; if (right[i] - left[i] <= 2) { ready[i] = true; ready_amount++; if (czyCieplo(&left[0])) { coordinates[i] = left[i]; } else if (czyCieplo(&right[0])) { coordinates[i] = right[i]; } else if (czyCieplo(&left[0])) { coordinates[i] = left[i]; } } else { if (czyCieplo(&left[0])) { b_search[i].second = middle; } else if (czyCieplo(&right[0])) { b_search[i].first = middle; if (is_odd) { b_search[i].first++; } } else if(czyCieplo(&left[0])) { b_search[i].second = middle; } else { if (is_odd) { b_search[i].first = middle; } else { ready[i] = true; ready_amount++; } } } if (b_search[i].second - b_search[i].first == 1) { if (b_search[i].first) b_search[i].first--; else b_search[i].second++; } } } for(int i=0; i<d; i++) { if (!ready[i]) { coordinates[i] = (b_search[i].first + b_search[i].second)/2; } } czyCieplo(&coordinates[0]); } znalazlem(&coordinates[0]); return 0; }; |
English