// Karol Kosinski #include "cielib.h" //#include <cstdio> #define FR(i,a,b) for(int i=(a);i<(b);++i) //#define DEBUG(x...) printf(x) #define DEBUG(x...) using namespace std; const int DX = 501; int Dim[DX], D_min[DX], D_max[DX]; int d, k, r, val; int max_diff() { int res = 0, dres = D_max[0] - D_min[0]; FR(i,1,d) { int aux = D_max[i] - D_min[i]; if (dres < aux) { res = i; dres = aux; } } return res; } int main() { d = podajD(); k = podajK(); r = podajR(); FR(i,0,d) { D_min[i] = 0; D_max[i] = r; } int ind = max_diff(); int diff = D_max[ind] - D_min[ind]; DEBUG("+ [%d] D_max(%d) - D_min(%d) = %d\n", ind, D_max[ind], D_min[ind], diff); while (diff != 0) { FR(i,0,d) Dim[i] = (D_max[i] + D_min[i]) / 2; Dim[ind] = D_min[ind]; czyCieplo(Dim); Dim[ind] = D_max[ind]; int hot = czyCieplo(Dim); if (diff == 2) { if (hot) D_min[ind] += diff; else { Dim[ind] = D_min[ind]; if (czyCieplo(Dim)) D_max[ind] -= diff; else { ++D_min[ind]; --D_max[ind]; } } } else if (diff == 3 or diff == 4) { if (hot) D_min[ind] += diff / 2; else D_max[ind] -= diff / 2; } else { if (hot) D_min[ind] += diff / 2 + 1; else D_max[ind] -= diff / 2; } DEBUG("- [%d] D_max(%d) - D_min(%d) = %d\n", ind, D_max[ind], D_min[ind], D_max[ind] - D_min[ind]); ind = max_diff(); diff = D_max[ind] - D_min[ind]; DEBUG("+ [%d] D_max(%d) - D_min(%d) = %d\n", ind, D_max[ind], D_min[ind], diff); } znalazlem(D_min); }
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 | // Karol Kosinski #include "cielib.h" //#include <cstdio> #define FR(i,a,b) for(int i=(a);i<(b);++i) //#define DEBUG(x...) printf(x) #define DEBUG(x...) using namespace std; const int DX = 501; int Dim[DX], D_min[DX], D_max[DX]; int d, k, r, val; int max_diff() { int res = 0, dres = D_max[0] - D_min[0]; FR(i,1,d) { int aux = D_max[i] - D_min[i]; if (dres < aux) { res = i; dres = aux; } } return res; } int main() { d = podajD(); k = podajK(); r = podajR(); FR(i,0,d) { D_min[i] = 0; D_max[i] = r; } int ind = max_diff(); int diff = D_max[ind] - D_min[ind]; DEBUG("+ [%d] D_max(%d) - D_min(%d) = %d\n", ind, D_max[ind], D_min[ind], diff); while (diff != 0) { FR(i,0,d) Dim[i] = (D_max[i] + D_min[i]) / 2; Dim[ind] = D_min[ind]; czyCieplo(Dim); Dim[ind] = D_max[ind]; int hot = czyCieplo(Dim); if (diff == 2) { if (hot) D_min[ind] += diff; else { Dim[ind] = D_min[ind]; if (czyCieplo(Dim)) D_max[ind] -= diff; else { ++D_min[ind]; --D_max[ind]; } } } else if (diff == 3 or diff == 4) { if (hot) D_min[ind] += diff / 2; else D_max[ind] -= diff / 2; } else { if (hot) D_min[ind] += diff / 2 + 1; else D_max[ind] -= diff / 2; } DEBUG("- [%d] D_max(%d) - D_min(%d) = %d\n", ind, D_max[ind], D_min[ind], D_max[ind] - D_min[ind]); ind = max_diff(); diff = D_max[ind] - D_min[ind]; DEBUG("+ [%d] D_max(%d) - D_min(%d) = %d\n", ind, D_max[ind], D_min[ind], diff); } znalazlem(D_min); } |