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
#include <iostream>
#include "teatr.h"
#include "message.h"

using namespace std;

int main()
{
    // --- WSZYSCY

    long ileRzedow = GetN();

    long i = 0;

    int mojNumer = MyNodeId();

    int ileInstancji = NumberOfNodes();

    // ---- wszystkie poza 0 liczą od siebie w dół

    // zliczanie klotni dla tego widza (o numerze rownym numerowi instancji)
    if(mojNumer != 0) {
        if(ileRzedow < 2)	// jak jest tylko jeden rzad, to nie ma klotni
			return 0;

        long long liczbaKlotniInstancji = 0;

        long *wzrost = new long[ileRzedow];
        for(i = 0; i < ileRzedow; i++)
            wzrost[i] = GetElement(i);

        long nrRzedu = 0;

        for(long j = 0 ; ; j++) {
            nrRzedu = mojNumer + j * (ileInstancji - 1);
            if(nrRzedu >= ileRzedow)    {   // po zliczeniu (lub jeśli nie masz czego liczyć) wyslij do 0
                PutLL(0, liczbaKlotniInstancji);
                Send(0);
                return 0;
            }

            for(i = nrRzedu - 1; i >= 0; i--) {
                if(wzrost[nrRzedu] < wzrost[i])    // jesli moj wzrost jest mniejszy od ktoregos przede mna,
                    liczbaKlotniInstancji++;                 // to jestem skory do klotni
            }
        }
    }
    else    {   // ---- 0 instancja tylko zlicza od innych
        if(ileRzedow < 2)	{// jak jest tylko jeden rzad, to nie ma klotni
            cout << 0;
			return 0;
        }

        unsigned long long liczbaKlotniWszystkich = 0;

        for(i = 1; i < ileInstancji; i++)  {
            Receive(i);
            liczbaKlotniWszystkich += GetLL(i);
        }

        cout << liczbaKlotniWszystkich;
    }

    return 0;
}