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
#include <cstdio>

#include "krazki.h"
#include "message.h"

// #define DEBUG 2

using namespace std;


#define MAX_NO 110
#define MAX_D 1000000000000000100

typedef long long int lli;
int n;
int m;
lli _v;
int _i;

lli lmd;
lli md; // max disc diameter
int mdi; // max disc index

lli mp; // min pipe diameter
int mpi; // min pipe index
int mpdi; // min pipe for max disc

int no; // node number
int noc; // node count

int i, j, l;

int r;

int ds, de; // diameters part start, end
int ps, pe; // pipe part start, end

lli tmd[MAX_NO];
int tmdi[MAX_NO];

lli tmp[MAX_NO];
int tmpi[MAX_NO];
int main()
{
	noc = NumberOfNodes();
	no = MyNodeId();
	n = PipeHeight();
	m = NumberOfDiscs();
	if(no)
	{
		return 0;
	}
	if(n < m)
	{
		if(no)
		{
			puts("0");
		}
		return 0;
	}
	r = n + 1;
	for(i = 1; i <= m && r; ++i)
	{
		md = DiscDiameter(i);
		if(lmd < md)
		{
#ifdef DEBUG
			printf("\tr=%d i=%d md=%lld mp=%lld\n", r, i, md, mp);
#endif
			for(j = 1; j < r; ++j)
			{
				mp = HoleDiameter(j);
				if(mp < md)
				{
					r = j;
				}
			}
		}
		--r;
		lmd = md;
		
	}
	printf("%d\n", r);
	return 0;
}