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
#include "cielib.h"
#define MIN(a,b) ((a>b)?b:a)
#define MAX(a,b) ((a>b)?a:b)

int zeruj(void);				//Qto
int znajdz(int maska[]);        //Logarytmiczne
int czyMax(int g);        //Liniowe
int dotarlem(void);
int zero[500], tab[500], m[500], t[500];

int d, r, _t;

int main(int argc, char **argv)
{
	d=podajD();
	r=podajR();
	czyCieplo(zero);
	if (d==1){
		int l=0;
		int h=r;
		int m;
		while (l<h-1){
			m=(l+h)/2;
			tab[0]=l;
			czyCieplo(tab);
			tab[0]=h;
			if (!czyCieplo(tab))
				h=m;
			else
				l=m+1;
		}
		tab[0]=l;
		czyCieplo(tab);
		tab[0]=h;
		if (czyCieplo(tab))
			tab[0]=h;
		else
			tab[0]=l;
		znalazlem(tab);
		return 0;
	}
	for(int i=0; i<d; ++i){
		tab[i]=0;
	}
	while(1){
		_t=-1;
		for(int i=0; i<d; ++i) {
			if(czyMax(i)){
				_t=i;
				break;			
			}
		}
		if ((_t==0)&&(dotarlem())){
			for (int i=0;i<d;++i)
				if (i>1)
					tab[i]++;
			znalazlem(tab);
			return 0;
		}
		tab[_t]++;
	}

	while(1){//czyCieplo(t)) {
		for(int i = 0; i < podajD(); ++i) {
			//t[i] += 1;
		}
	}

	znalazlem(tab);
}

int zeruj(void)
{
	czyCieplo(zero);
	return 0;
}

int znajdz(int maska[])
{


	return 0;
}

int czyMax(int g)
{
	for (int i=0; i<d; ++i){
		t[i]=MIN(tab[i]+1, r);
	}
	t[g]=MAX(t[g]-1, 0);
	czyCieplo(tab);
	return !czyCieplo(t);
}

int dotarlem(void)
{	
	for (int i=0; i<d; ++i){
		t[i]=MIN(tab[i]+1, r);
	}
	czyCieplo(tab);
	return !czyCieplo(t);
}