#include "cielib.h"
const int MAXD = 512;
int low[MAXD];
int high[MAXD];
int D, R, K;
void midpoint(int poz[]) {
for (int i=0; i<D; ++i)
poz[i] = (low[i]+high[i])/2;
}
int find_widest_dimension() {
int maxi = -1;
int max = 0;
for (int i=0; i<D; ++i) {
if (high[i]-low[i] > max) {
max = high[i]-low[i];
maxi = i;
}
}
return maxi;
}
int main() {
D = podajD();
R = podajR();
K = podajK();
int test[MAXD];
for (int i=0; i<D; ++i)
high[i] = R;
while (1) {
// cout<<endl;
// znalazlem(low);
// znalazlem(high);
int dim = find_widest_dimension();
if (dim == -1)
break;
if (high[dim]-low[dim]>1) {
midpoint(test);
test[dim] = low[dim];
czyCieplo(test);
test[dim] = high[dim];
if (czyCieplo(test)) {
low[dim] = low[dim] + (high[dim]-low[dim])/2 + 1;
} else {
//test[dim] = low[dim];
//if (czyCieplo(test)) {
high[dim] = low[dim] + (high[dim]-low[dim])/2
+((high[dim]-low[dim])>2);
//} else {
// cout<<"Err";
//}
}
} else {
// cout<<"asdf"<<endl;
midpoint(test); // will set to "low" on all coords
czyCieplo(test);
test[dim]++;
if (czyCieplo(test)) {low[dim]++; break;} // found
test[dim]--;
if (czyCieplo(test)) {high[dim]--; break;} // found
if (low[dim]>0) {
test[dim]--;
czyCieplo(test);
test[dim]++;
if (czyCieplo(test)) {
low[dim] = high[dim];
} else {
high[dim] = low[dim];
}
} else {
test[dim]+=2;
czyCieplo(test);
test[dim]--;
if (czyCieplo(test)) {
high[dim] = low[dim];
} else {
low[dim] = high[dim];
}
}
}
}
midpoint(test);
for (int i = 0; i<D; ++i) {
czyCieplo(test);
if (test[i]>0) {
test[i]--;
if (czyCieplo(test)) {high[i]--; low[i]--; break;}
test[i]++;
}
czyCieplo(test);
if (test[i]<R) {
test[i]++;
if (czyCieplo(test)) {high[i]++; low[i]++; break;}
test[i]--;
}
}
znalazlem(low);
// znalazlem(high);
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #include "cielib.h" const int MAXD = 512; int low[MAXD]; int high[MAXD]; int D, R, K; void midpoint(int poz[]) { for (int i=0; i<D; ++i) poz[i] = (low[i]+high[i])/2; } int find_widest_dimension() { int maxi = -1; int max = 0; for (int i=0; i<D; ++i) { if (high[i]-low[i] > max) { max = high[i]-low[i]; maxi = i; } } return maxi; } int main() { D = podajD(); R = podajR(); K = podajK(); int test[MAXD]; for (int i=0; i<D; ++i) high[i] = R; while (1) { // cout<<endl; // znalazlem(low); // znalazlem(high); int dim = find_widest_dimension(); if (dim == -1) break; if (high[dim]-low[dim]>1) { midpoint(test); test[dim] = low[dim]; czyCieplo(test); test[dim] = high[dim]; if (czyCieplo(test)) { low[dim] = low[dim] + (high[dim]-low[dim])/2 + 1; } else { //test[dim] = low[dim]; //if (czyCieplo(test)) { high[dim] = low[dim] + (high[dim]-low[dim])/2 +((high[dim]-low[dim])>2); //} else { // cout<<"Err"; //} } } else { // cout<<"asdf"<<endl; midpoint(test); // will set to "low" on all coords czyCieplo(test); test[dim]++; if (czyCieplo(test)) {low[dim]++; break;} // found test[dim]--; if (czyCieplo(test)) {high[dim]--; break;} // found if (low[dim]>0) { test[dim]--; czyCieplo(test); test[dim]++; if (czyCieplo(test)) { low[dim] = high[dim]; } else { high[dim] = low[dim]; } } else { test[dim]+=2; czyCieplo(test); test[dim]--; if (czyCieplo(test)) { high[dim] = low[dim]; } else { low[dim] = high[dim]; } } } } midpoint(test); for (int i = 0; i<D; ++i) { czyCieplo(test); if (test[i]>0) { test[i]--; if (czyCieplo(test)) {high[i]--; low[i]--; break;} test[i]++; } czyCieplo(test); if (test[i]<R) { test[i]++; if (czyCieplo(test)) {high[i]++; low[i]++; break;} test[i]--; } } znalazlem(low); // znalazlem(high); return 0; } |
English