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
93
#include "cielib.h"
#include <iostream>
using namespace std;
int srodek(int a, int b)
{
    return (a+b)/2;
}
int max_odl(int l, int p) // gdy jestesmy w srodku [l,p] to do kazdego punktu mamy max taka odleglosc
{
    return p-srodek(l,p);
}

int max_odl_tab(int l[], int p[], int rozm) // robi max z max_odl po wymiarach
{
    int wynik = 0;
    for( int i=0; i<rozm; i++)
	if(max_odl( l[i], p[i]) > wynik)
	    wynik = max_odl( l[i], p[i]);
	
    return wynik;
}


int main() {
	bool wyjscie;
	int cieplo,staret;
	const int d = podajD(); // wymiar lasu
	const int R = podajR(); //dlugosc boku
	int t[d]; // liczby w t sa z przedzialu [0,R], tu bedzie wynik
	for(int i=0; i<d; i++)
	    t[i] = R/2;
	
	//t[0]=0;
	int lewy[d]; 
	int prawy [d]; // prawdziwe t[d] bedzie w przedziale [lewy[d], prawy[d]]
	for(int i=0; i<d; i++)
	{
	    lewy[i]=0;
	    prawy[i]=R;
	}
	
	//cieplo=czyCieplo(t) //pierwsze wywolanie 0, R/2, R/2,...
	while(prawy[0]- lewy[0] >2) // po  wykonaniu dla kazdego lewy - prawy jest stale
	{
	    staret=t[0];
	    t[0]=lewy[0];
	    cieplo=czyCieplo(t);
	    
	    for(int i=0; i<d; i++)
	    {
		
		t[i]=prawy[i];
		cieplo=czyCieplo(t);
		if(cieplo == 1)
		{
		    lewy[i] = prawy[i] - ((prawy[i]-lewy[i])/2 )-1;
		}
		else 
		{
		    prawy[i] = lewy[i] + ((prawy[i] -lewy[i])/2) +1;
		}
		t[i]=staret; //powrot do poprzedniej wartosci
		if(i<d-1) {staret= t[i+1]; t[i+1] = lewy[i+1];}
		cieplo=czyCieplo(t);
	    }
	    for(int i=0; i<d; i++) t[i]= srodek(lewy[i], prawy[i]);
	    //for(int i=0; i<d; i++) cout<<t[i]<<" " <<prawy[i]<<" " <<lewy[i]<<" ";
	    //cout<<"\n";

	}
	// mamy przedzialy dlugosci 3
	for(int i=0; i<d; i++)
	{
	 t[i]=lewy[i];
	 cieplo=czyCieplo(t);
	 t[i] =prawy[i]; // jak cieplo to tu zostaje
	 cieplo = czyCieplo(t);
	 if(cieplo == 0)
	 {
	     t[i]=lewy[i];
	     cieplo=czyCieplo(t);
	     if(cieplo == 0 ) // jak cieplo to zostaje, inaczej srodek
		 t[i]= srodek(lewy[i], prawy[i]);
	 }
	}
	
	 
	znalazlem(t); //hura


	

}