#include "cielib.h"
#include <vector>
#include <stdio.h>
int* poz;
int* max;
inline void idz_dalej(int dim) {
//printf("poz[%i]=%i max[%i]=%i => ", dim, poz[dim], dim, max[dim]);
int s = max[dim]+poz[dim];
poz[dim] = s/2 + (s%2!=0); //ceiling
//printf("poz[%i]=%i max[%i]=%i\n", dim, poz[dim], dim, max[dim]);
}
inline void idz_blizej(int dim) {
//printf("poz[%i]=%i max[%i]=%i => ", dim, poz[dim], dim, max[dim]);
max[dim] = (max[dim]+poz[dim])/2;
//printf("poz[%i]=%i max[%i]=%i\n", dim, poz[dim], dim, max[dim]);
}
inline int width(int dim) {
//printf("poz[%i]=%i max[%i]=%i\n", dim, poz[dim], dim, max[dim]);
return max[dim]-poz[dim] ;
}
int main() {
int d = podajD();
int r = podajR();
poz = new int[d];
max = new int[d];
std::vector<int> cale;
std::vector<int> polowki;
for (int i=0; i<d; ++i) {
poz[i] = 0;
max[i] = r;
cale.push_back(i);
}
while (width(0)>0) {
//printf("width(0)=%i\n", width(0));
while (cale.size()>0) {
int wszystkie = cale.size();
std::vector<int> bez_zmiany;
while (cale.size()>0) {
//printf("cale.size()=%i\n", cale.size());
int dim = cale.back(); cale.pop_back();
czyCieplo(poz);
int prev_poz = poz[dim];
poz[dim] = max[dim];
int cieplej_dalej = czyCieplo(poz);
poz[dim] = prev_poz;
if (cieplej_dalej>0) {
polowki.push_back(dim); idz_dalej(dim);
} else
{
int cieplej_blizej = czyCieplo(poz);
if (cieplej_blizej>0) {
polowki.push_back(dim); idz_blizej(dim);
} else {
bez_zmiany.push_back(dim);
}
}
}//while
//printf("bez_zmiany.size()=%i wszystkie=%i\n", bez_zmiany.size(), wszystkie);
if (bez_zmiany.size()==wszystkie) {
while (bez_zmiany.size()>0) {
int dim = bez_zmiany.back(); bez_zmiany.pop_back();
polowki.push_back(dim); idz_dalej(dim);
}
} //if
cale = std::move(bez_zmiany); bez_zmiany.clear();
} //while cale.size()>0
//printf("changing bounds to %i\n", width(0));
cale = std::move(polowki); polowki.clear();
}
//for (int i=0; i<d; ++i) printf("poz[%i]=%i\n", i, poz[i]);
znalazlem(poz);
}
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 | #include "cielib.h" #include <vector> #include <stdio.h> int* poz; int* max; inline void idz_dalej(int dim) { //printf("poz[%i]=%i max[%i]=%i => ", dim, poz[dim], dim, max[dim]); int s = max[dim]+poz[dim]; poz[dim] = s/2 + (s%2!=0); //ceiling //printf("poz[%i]=%i max[%i]=%i\n", dim, poz[dim], dim, max[dim]); } inline void idz_blizej(int dim) { //printf("poz[%i]=%i max[%i]=%i => ", dim, poz[dim], dim, max[dim]); max[dim] = (max[dim]+poz[dim])/2; //printf("poz[%i]=%i max[%i]=%i\n", dim, poz[dim], dim, max[dim]); } inline int width(int dim) { //printf("poz[%i]=%i max[%i]=%i\n", dim, poz[dim], dim, max[dim]); return max[dim]-poz[dim] ; } int main() { int d = podajD(); int r = podajR(); poz = new int[d]; max = new int[d]; std::vector<int> cale; std::vector<int> polowki; for (int i=0; i<d; ++i) { poz[i] = 0; max[i] = r; cale.push_back(i); } while (width(0)>0) { //printf("width(0)=%i\n", width(0)); while (cale.size()>0) { int wszystkie = cale.size(); std::vector<int> bez_zmiany; while (cale.size()>0) { //printf("cale.size()=%i\n", cale.size()); int dim = cale.back(); cale.pop_back(); czyCieplo(poz); int prev_poz = poz[dim]; poz[dim] = max[dim]; int cieplej_dalej = czyCieplo(poz); poz[dim] = prev_poz; if (cieplej_dalej>0) { polowki.push_back(dim); idz_dalej(dim); } else { int cieplej_blizej = czyCieplo(poz); if (cieplej_blizej>0) { polowki.push_back(dim); idz_blizej(dim); } else { bez_zmiany.push_back(dim); } } }//while //printf("bez_zmiany.size()=%i wszystkie=%i\n", bez_zmiany.size(), wszystkie); if (bez_zmiany.size()==wszystkie) { while (bez_zmiany.size()>0) { int dim = bez_zmiany.back(); bez_zmiany.pop_back(); polowki.push_back(dim); idz_dalej(dim); } } //if cale = std::move(bez_zmiany); bez_zmiany.clear(); } //while cale.size()>0 //printf("changing bounds to %i\n", width(0)); cale = std::move(polowki); polowki.clear(); } //for (int i=0; i<d; ++i) printf("poz[%i]=%i\n", i, poz[i]); znalazlem(poz); } |
English