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
92
#include<iostream>
#include<cstdlib>
#include "cielib.h"
using namespace std;

#define MAX 507


int iHateUOne(int pozycja[], int k, int d) {
	int res =0;
	pozycja[k] = pozycja[k] + 1;
	if(k < d-1)
		res = iHateUOne(pozycja, k+1, d);
	else 
		res = czyCieplo(pozycja);
	if(res == 0) {
	pozycja[k] = pozycja[k] - 1;
	if(k < d-1)
		res = iHateUOne(pozycja, k+1, d);
	else 
		res = czyCieplo(pozycja);
	}
	return res;
}

int main() {
	//ios_base::sync_with_stdio(0);
	int d = podajD();
	int k = podajK();
	int r = podajR();
	
	int pozycja[MAX];
	int A[ MAX ];
	int P[MAX];
	int Q[MAX];
	
	for(int i=0; i<d; i++) {
		pozycja[i] = 0;
		A[i] = 0;
		P[i] = 0;
		Q[i] = r;
	}
	
		
	//find possible move
	int dimensions = d;
	int a = 0;
	bool kp = false;
	while( dimensions > 0 ) {
		//cout<<a<<" "<<P[a]<<" "<<Q[a]<<" "<<pozycja[a]<<" "<<D<<endl;
		if( A[a] == 0 ) {
			int res = czyCieplo(pozycja); // ustaw sie
			pozycja[a] = Q[a];
			res = czyCieplo(pozycja);
			if(res == 1) {
				P[a] = ( P[a] + Q[a] )/2 + 1;
			} else {
				pozycja[a] = ( P[a] + Q[a] )/2;
				res = czyCieplo(pozycja);
				if( res == 1) {
					Q[a] = ( P[a] + Q[a] )/2;
				}
			}
			pozycja[a] = P[a];
			res = czyCieplo(pozycja);
			if(P[a]==Q[a]) {
				A[a] = 1;
				dimensions--;
				//cout<<"! "<<a<<endl;
			}
			if(Q[a]-P[a] == 1) {
				A[a] = 2;
				kp = true;
				dimensions--;
			}
		}
		a++;
		if(a >= d) a%=d;
	}
	if(kp) {
		//cout<<":/";
		iHateUOne(pozycja, 0, d);
		for(int i=0; i<d; i++) 
		cout<<pozycja[i]<<endl;
	}
	
	
	if(!kp)
	for(int i=0; i<d; i++) 
		cout<<P[i]<<endl;
	return 0;
}