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

using namespace std;

int main()
{
    int nodes=NumberOfNodes();
    int myNode=MyNodeId();
    long long int N=GetN();
    long long int minl, minp, all, cur, pom, pom2, minlocal;
    minl=minp=all=cur=minlocal=pom2=0;
    for(int i = (myNode*N)/nodes;
        i<((myNode+1)*N)/nodes;
        i++){
        pom=GetTaste(i);
        cur+=pom;
        pom2+=pom;
        if(pom2>0)pom2=0;
        else if(pom2<minlocal)minlocal=pom2;
        if(cur<minl)minl=cur;
    }
    all=cur;
    cur=0;
    for(int i=((myNode+1)*N)/nodes-1;
        i>=((myNode)*N)/nodes;
        i--){
        cur+=GetTaste(i);
        if(cur<minp)minp=cur;
    }
    /* cout << minlocal << " ";
        cout << minl << " ";
        cout << all << " ";
        cout << minp << " ";*/
    if(myNode){
        PutLL(0, minlocal);
        PutLL(0, minl);
        PutLL(0, all);
        PutLL(0, minp);
        Send(0);
    }
    else{
        long long int ol [100];
        long long int al [100];
        long long int op [100];
        long long int minimum=minlocal;
        ol[0]=minl;
        al[0]=all;
        op[0]=minp;
        cur=minl=minp=0;
        for(int i=1; i<nodes; i++){
            Receive(i);
            cur= GetLL(i);
            if(cur<minimum)
                minimum=cur;
            ol[i] = GetLL(i);
            al[i] = GetLL(i);
            op[i] = GetLL(i);
        }

        for(int i = 0; i<nodes; i++){
            cur=0;
            cur+=op[i];
            for(int j = i+1; j<nodes; j++){
                cur+=ol[j];
                if(cur<minimum)
                    minimum=cur;
                cur-=ol[j];
                cur+=al[j];
            }
        }
        all=0;
        for(int i=0; i<nodes; i++)
            all+=al[i];

        cout << all-minimum;
    }
    return 0;
}