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
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
#include "cielib.h"

int d;
int result[500];

void dziel(int cornerA[], int cornerB[])
{
	int test1[d], test2[d];
	
	for (int i=0, j; i<d; i++)
	{
		for (j=0; j<d; j++)
		{
			test1[j]=(cornerA[j]+cornerB[j]+1)/2;;
			test2[j]=(cornerA[j]+cornerB[j]+1)/2;;
		}
		test1[i]=cornerA[i];
		test2[i]=cornerB[i];
		czyCieplo(test1);
		result[i]=czyCieplo(test2);
	}
}

int main() {
	d = podajD();
	int  r = podajR();
	
	int cornerA[d], cornerB[d], size=r;
	for(int i=0; i<d; i++)
	{
		cornerA[i]=0;
		cornerB[i]=r;
	}
	while (size > 3) 
	{
		size = 0;
		dziel(cornerA, cornerB);
		for(int i=0; i<d; i++)
		{
			if (result[i]) 
				cornerA[i]=(cornerB[i]+cornerA[i]+1)/2;
			else
				cornerB[i]=(cornerB[i]+cornerA[i])/2;
			if (size < cornerB[i]-cornerA[i]) size = cornerB[i]-cornerA[i];
			
		}	
	}
		
			
	for(int i=0; i<d; i++)
	{
	    cornerA[i]+=size/2;
		cornerB[i]=cornerA[i];
	}
		
	int move;
	czyCieplo(cornerA);
	
	do
	{
	
		for(int i=0; i<d; i++)
			cornerA[i]=cornerB[i];
	
	    move=0;
	    int l;
	    for(int i=0; i<d; i++)
	    {
		l=0;
		if (cornerA[i] < r )
		{
		    cornerA[i]++;
		    if (czyCieplo(cornerA))
		    {
				move=1;
				cornerB[i]=cornerA[i];
		    }
		    cornerA[i]--;
		    l = czyCieplo(cornerA);
		}
		
		if (cornerA[i]==0) continue;
		
		cornerA[i]--;
		if (czyCieplo(cornerA))
		{
		    move=1;
			cornerB[i]=cornerA[i];
		}
		cornerA[i]++;
		if (czyCieplo(cornerA))
		{
		    if (l) continue;
		    if (cornerA[i] < r )
		    {
				cornerA[i]++;
				czyCieplo(cornerA);
				cornerB[i]=cornerA[i];
		    }
		}
		else if (l)
		{
		    cornerA[i]--;
		    czyCieplo(cornerA);
		    cornerB[i]=cornerA[i];
		}
	    }
	}
	while(move);
	znalazlem(cornerB);	
}