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
#include <iostream>
#include "cielib.h"
#define MAX 500
using namespace std;

int main()
{
int r=podajR();
int d=podajD();
int pocz[MAX];
int wejscie1[MAX];
int wejscie2[MAX];
int middle;
int wartosc;
for(int i=0;i<d;i++)pocz[i]=0; /// zerowanie
while(r>1)
{
if(r%2==0)   /// przypadek parzysty
{
middle=r/2;
for(int i=0;i<d;i++)wejscie1[i]=pocz[i]+middle; ///ustaw na srodek
 for(int i=0;i<d;i++)
 {
  wejscie1[i]=pocz[i];
  czyCieplo(wejscie1); /// dolne
  wejscie1[i]+=r;
  wartosc=czyCieplo(wejscie1);  ///gorne
  if(wartosc>0)pocz[i]+=middle;
  wejscie1[i]=pocz[i]+middle;
 }
 r=middle;
}
else     /// przypadek nieparzysty
{
middle=r/2;
for(int i=0;i<d;i++)
{
 wejscie1[i]=pocz[i]+middle;
 wejscie2[i]=pocz[i]+middle+1;
}
for(int i=0;i<d;i++)
{
 wejscie1[i]=pocz[i];
 czyCieplo(wejscie1);  ///dolne
 wejscie1[i]+=middle;
 wejscie2[i]=pocz[i]+r;
 wartosc=czyCieplo(wejscie2); ///gorne
 if(wartosc>0) pocz[i]+=middle;
 wejscie2[i]-=middle;
}
r=middle+1;
}

}
 /// r jest rowne 1 (nie moze byc rowne 0)
/// wejscie1 uzywam do wypisania wyniki
for(int i=0;i<d;i++)
{
 czyCieplo(pocz);
 pocz[i]++;
 wartosc=czyCieplo(pocz);
 if(wartosc>0)wejscie1[i]=pocz[i];
 else wejscie1[i]=pocz[i]-1;
 pocz[i]--;
}
znalazlem(wejscie1);


return 0;
}