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