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
#include<cstdio>
#include "cielib.h"
#include<queue>
using namespace std;

int p[501];
int q[501];
int t[501];

struct aa{
	int a;
	aa(int a):a(a){}
};

bool operator<(aa A,aa B){
	return ((q[A.a]-p[A.a])<(q[B.a]-p[B.a]));
}


main(){
	int r=podajR(),d=podajD();
	for(int i=0;i<d;i++){
		p[i]=0;
		q[i]=r;
	}
	priority_queue<aa> Q;
	for(int i=0;i<d;++i)Q.push(aa(i));
	while(!Q.empty()){
			int a=Q.top().a;
			Q.pop();
			int k=(q[a]+p[a]+1)/2;
			t[a]=p[a];
			for(int i=0;i<d;i++)
				if(i!=a)t[i]=(q[i]+p[i]+1)/2;

			if(q[a]-p[a]==1){
				int s=p[a],u=q[a];
				if(p[a]>0)s--;
				else u++;
				bool x=false;
				if(s!=p[a])x=true;
				if(x)t[a]=s;
				else t[a]=u;
				czyCieplo(t);
				if(x)t[a]=u;
				else t[a]=s;
				if(czyCieplo(t)){
					if(x) p[a]=q[a];
					else q[a]=p[a];
				}
				else if(x) q[a]=p[a];else p[a]=q[a];
				continue;
			}
			czyCieplo(t);
			t[a]=q[a];
			if(czyCieplo(t))p[a]=k;
			else q[a]=k;
			if(q[a]>p[a])Q.push(aa(a));
//	for(int i=0;i<d;++i)printf("%d\t",p[i]);
//	printf("\n");
//	for(int i=0;i<d;++i)printf("%d\t",q[i]);
//	printf("\n\n");
	}
	for(int i=0;i<d;++i)t[i]=p[i];
	znalazlem(t);
}