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
#include <cstdio>
#include <vector>
#include "krazki.h"
#include "message.h"
#include <cmath>

using namespace std;

vector<long long> mi;

int main()
{
    int n=PipeHeight();
    int m=NumberOfDiscs();
    int poprzedni;
    int a;

    if(m>n)
    {
        if(MyNodeId()==0)
        {
           printf("0");
           return 0;
        }
    }else{

        mi.push_back(0);
        mi.push_back(HoleDiameter(1));
        for(int i=2;i<n+1;i++)
        {
            mi.push_back(min(mi[i-1],HoleDiameter(i)));
        }
        poprzedni=n+1;

        for(int j=1;j<m+1;j++)
        {
            a=poprzedni-1;
            for(;a>0 && mi[a]<DiscDiameter(j);a--){}
            poprzedni=a;
            if(poprzedni==0)
            {
                if(MyNodeId()==0)
                {
                    printf("0");
                    return 0;
                }
            }
        }
        if(MyNodeId()==0)
        {
            printf("%d",poprzedni);
            return 0;
        }
    }
}