#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; } |
English