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