#include "cielib.h"
#include <cstdio>
void singleLane(int * plansza,
int * min,
int * max,
int id) {
int c_min = min[id];
int c_max = max[id];
int dif = c_max - c_min;
int center = dif / 2;
if (dif % 2) {
plansza[id] = c_min;
int val = czyCieplo(plansza);
plansza[id] = c_max;
val = czyCieplo(plansza);
if (val) {
min[id] = center + 2;
plansza[id] = (max[id] + min[id]) / 2;
return;
}
plansza[id] = c_min;
val = czyCieplo(plansza);
if (val) {
max[id] = center -1;
plansza[id] = (max[id] + min[id]) / 2;
return;
}
min[id] = center;
max[id] = center + 1;
plansza[id] = (max[id] + min[id]) / 2;
} else {
plansza[id] = c_min;
int val = czyCieplo(plansza);
plansza[id] = c_max;
val = czyCieplo(plansza);
if (val) {
min[id] = center + 1;
plansza[id] = (max[id] + min[id]) / 2;
return;
}
plansza[id] = c_min;
val = czyCieplo(plansza);
if (val) {
max[id] = center-1;
plansza[id] = (max[id] + min[id]) / 2;
return;
}
plansza[id] = center;
max[id] = center;
min[id] = center;
}
}
int main(void) {
int wymiar = podajD();
int bok = podajR();
int plansza[500];
int min[500];
int max[500];
for (int i=0; i<wymiar; i++) {
plansza[i] = bok / 2;
min[i] = 0;
max[i] = bok;
}
int max_dif = bok;
while (max_dif != 0) {
for (int i=0; i < wymiar; i++) {
if ((max[i] - min[i]) == max_dif)
singleLane(plansza, min, max,i);
}
max_dif = 0;
for (int i=0; i < wymiar; i++)
if ((max[i] - min[i]) > max_dif)
max_dif = max[i] - min[i];
}
znalazlem(plansza);
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 | #include "cielib.h" #include <cstdio> void singleLane(int * plansza, int * min, int * max, int id) { int c_min = min[id]; int c_max = max[id]; int dif = c_max - c_min; int center = dif / 2; if (dif % 2) { plansza[id] = c_min; int val = czyCieplo(plansza); plansza[id] = c_max; val = czyCieplo(plansza); if (val) { min[id] = center + 2; plansza[id] = (max[id] + min[id]) / 2; return; } plansza[id] = c_min; val = czyCieplo(plansza); if (val) { max[id] = center -1; plansza[id] = (max[id] + min[id]) / 2; return; } min[id] = center; max[id] = center + 1; plansza[id] = (max[id] + min[id]) / 2; } else { plansza[id] = c_min; int val = czyCieplo(plansza); plansza[id] = c_max; val = czyCieplo(plansza); if (val) { min[id] = center + 1; plansza[id] = (max[id] + min[id]) / 2; return; } plansza[id] = c_min; val = czyCieplo(plansza); if (val) { max[id] = center-1; plansza[id] = (max[id] + min[id]) / 2; return; } plansza[id] = center; max[id] = center; min[id] = center; } } int main(void) { int wymiar = podajD(); int bok = podajR(); int plansza[500]; int min[500]; int max[500]; for (int i=0; i<wymiar; i++) { plansza[i] = bok / 2; min[i] = 0; max[i] = bok; } int max_dif = bok; while (max_dif != 0) { for (int i=0; i < wymiar; i++) { if ((max[i] - min[i]) == max_dif) singleLane(plansza, min, max,i); } max_dif = 0; for (int i=0; i < wymiar; i++) if ((max[i] - min[i]) > max_dif) max_dif = max[i] - min[i]; } znalazlem(plansza); return 0; } |
English