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
//Daniel Grzegorzewski
#include <bits/stdc++.h>
#include "cielib.h"

#define MP make_pair
#define PB push_back
#define ST first
#define ND second

using namespace std;

typedef pair<int, int> PII;
typedef vector<int> VI;
typedef vector<PII> VII;
typedef long long LL;

void init_ios()
{
     ios_base::sync_with_stdio(0);
     cin.tie(0);
}

const int D = 505;

PII prz[D];
bool flag;
int d, k, r, a[D];

int main()
{
    init_ios();
    d = podajD();
    k = podajK();
    r = podajR();

    for (int i = 0; i < d; ++i) {
    	prz[i] = {0, r};
    	a[i] = r/2;
    }

    while (!flag) {
    	flag = true;
    	for (int i = 0; i < d; ++i)
    		if (prz[i].ND-prz[i].ST >= 2) {
    			flag = false;
    			a[i] = prz[i].ST;
    			czyCieplo(a);
    			a[i] = prz[i].ND;
    			bool res = czyCieplo(a);
    			if (res)
    				prz[i] = {(prz[i].ST+prz[i].ND)/2, prz[i].ND};
    			else
    				prz[i] = {prz[i].ST, (prz[i].ST+prz[i].ND+1)/2};
    			a[i] = (prz[i].ST+prz[i].ND)/2;
    		}
    }
    for (int i = 0; i < d; ++i)
    	if (prz[i].ST != prz[i].ND) {
    		if (prz[i].ST > 0 && prz[i].ND < r) {
    			a[i] = prz[i].ST-1;
    			czyCieplo(a);
    			a[i] = prz[i].ND+1;
    			bool res = czyCieplo(a);
    			if (res) 
    				a[i] = prz[i].ND;
    			else
    				a[i] = prz[i].ST;
    		}
    		else if (prz[i].ST == 0) {
    			a[i] = prz[i].ND+1;
    			czyCieplo(a);
    			a[i] = prz[i].ST;
    			bool res = czyCieplo(a);
    			if (res)
    				a[i] = prz[i].ST;
    			else
    				a[i] = prz[i].ND;
    		}
    		else {
    			a[i] = prz[i].ST-1;
    			czyCieplo(a);
    			a[i] = prz[i].ND;
    			bool res = czyCieplo(a);
    			if (res)
    				a[i] = prz[i].ND;
    			else
    				a[i] = prz[i].ST;
    		}
    	}
    znalazlem(a);
}