#include "cielib.h" int range[500][2]; int center[500]; int Dim; int Krok; int GetMaxRange(); void FillCenter(); void SubRange(int d, int maxRange); int main() { Dim = podajD(); Krok = podajK(); int r = podajR(); for(int i = 0; i < Dim; i++) range[i][1] = r; int max = 1000; while((max = GetMaxRange()) > 0) { FillCenter(); for(int i = 0; i < Dim; i++) SubRange(i, max); } FillCenter(); znalazlem(center); return 0; } int GetMaxRange() { int max = 0; for(int i = 0; i < Dim; i++) if(max < range[i][1] - range[i][0]) max = range[i][1] - range[i][0]; return max; } void FillCenter() { for(int i = 0; i < Dim; i++) center[i] = (range[i][0] + range[i][1]) / 2; } void SubRange(int d, int maxRange) { int ran = range[d][1] - range[d][0]; int cen = center[d]; if(maxRange > ran) return; if(ran == 1) { if(range[d][0] == 0) range[d][1] = 2; else range[d][0] = range[d][0] - 1; } int downCenter = (range[d][0] + range[d][1]) / 2; int upCenter = downCenter + (range[d][0] + range[d][1]) % 2; center[d] = range[d][0]; //Krok--; czyCieplo(center); center[d] = range[d][1]; //Krok--; if(czyCieplo(center)) { range[d][0] = downCenter + 1; return; } center[d] = range[d][0]; //Krok--; if(czyCieplo(center)) { range[d][1] = upCenter - 1; return; } range[d][0] = downCenter; range[d][1] = upCenter; center[d] = cen; }
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 | #include "cielib.h" int range[500][2]; int center[500]; int Dim; int Krok; int GetMaxRange(); void FillCenter(); void SubRange(int d, int maxRange); int main() { Dim = podajD(); Krok = podajK(); int r = podajR(); for(int i = 0; i < Dim; i++) range[i][1] = r; int max = 1000; while((max = GetMaxRange()) > 0) { FillCenter(); for(int i = 0; i < Dim; i++) SubRange(i, max); } FillCenter(); znalazlem(center); return 0; } int GetMaxRange() { int max = 0; for(int i = 0; i < Dim; i++) if(max < range[i][1] - range[i][0]) max = range[i][1] - range[i][0]; return max; } void FillCenter() { for(int i = 0; i < Dim; i++) center[i] = (range[i][0] + range[i][1]) / 2; } void SubRange(int d, int maxRange) { int ran = range[d][1] - range[d][0]; int cen = center[d]; if(maxRange > ran) return; if(ran == 1) { if(range[d][0] == 0) range[d][1] = 2; else range[d][0] = range[d][0] - 1; } int downCenter = (range[d][0] + range[d][1]) / 2; int upCenter = downCenter + (range[d][0] + range[d][1]) % 2; center[d] = range[d][0]; //Krok--; czyCieplo(center); center[d] = range[d][1]; //Krok--; if(czyCieplo(center)) { range[d][0] = downCenter + 1; return; } center[d] = range[d][0]; //Krok--; if(czyCieplo(center)) { range[d][1] = upCenter - 1; return; } range[d][0] = downCenter; range[d][1] = upCenter; center[d] = cen; } |