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
#include "cielib.h"

enum pos {up, mid, down};

int main() {
    int d = podajD(), k = podajK(), r = podajR();
    int interval[3][d];

    for(int i = 0; i < d; i++) {
        interval[down][i] = 0;
        interval[up][i] = r;
        interval[mid][i] = (interval[up][i] + interval[down][i]) / 2;
    }

    while(1) {
        bool flag = false;

        for(int i = 0; i < d; i++) if(interval[up][i] - interval[down][i] > 2) flag = true;


        if(!flag) {
            for(int i = 0; i < d; i++) interval[mid][i] = (interval[up][i] + interval[down][i]) / 2;
            for(int i = 0; i < d; i++) {

                interval[mid][i] = interval[down][i];
                if(czyCieplo(interval[mid]));

                interval[mid][i] = interval[up][i];
                if(czyCieplo(interval[mid])) {
                    interval[up][i] = interval[down][i] = interval[mid][i] = interval[up][i];
                    continue;
                }

                interval[mid][i] = interval[down][i];
                if(czyCieplo(interval[mid])) {
                    interval[up][i] = interval[down][i] = interval[mid][i] = interval[down][i];
                    continue;
                }

                interval[up][i] = interval[down][i] = interval[mid][i] = (interval[up][i] + interval[down][i]) / 2;
            }
            break;
        }

        for(int i = 0; i < d; i++) {

            if(interval[up][i] - interval[down][i] == 2 || interval[up][i] - interval[down][i] == 0) continue;

            interval[mid][i] = interval[down][i];
            if(czyCieplo(interval[mid]));

            interval[mid][i] = interval[up][i];
            if(czyCieplo(interval[mid])) {
                interval[down][i] = (interval[up][i] + interval[down][i]) / 2;
                if((interval[up][i] - interval[down][i]) % 2) interval[down][i] -= 1;
                continue;
            }

            interval[mid][i] = interval[down][i];
            if(czyCieplo(interval[mid])) {
                interval[up][i] = (interval[up][i] + interval[down][i]) / 2;
                if((interval[up][i] - interval[down][i]) % 2) interval[up][i] += 1;
                continue;
            }

            if((interval[up][i] - interval[down][i]) % 2) {
                interval[down][i] = (interval[up][i] + interval[down][i]) / 2;
                interval[up][i] = interval[down][i] + 2;
                interval[mid][i] = interval[down][i] + 1;
            }
            else interval[up][i] = interval[down][i] = interval[mid][i] = (interval[up][i] + interval[down][i]) / 2;
        }

        for(int i = 0; i < d; i++) interval[mid][i] = (interval[up][i] + interval[down][i]) / 2;
    }
    znalazlem(interval[mid]);
    return 0;
}