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
#include <stdio.h>
#include <algorithm>
#include "message.h"
#include "kanapka.h"
using namespace std;
int main(void){
    long long n;
    n=GetN();
    long long element[n];
    for(long long i=0;i<n;i++) element[i]=GetTaste(i);
    long long i, max, max1,zjedzony;
    long long poczatek=(MyNodeId()*n)/NumberOfNodes();
    long long koniec=((MyNodeID()+1)*n)/NumberOfNodes();
    for(i=poczatek;i<koniec;i+=2){
        if(i==0)max=element[0];
        else{
            if(element[i]+element[i-1]+max>0){
                if(element[i]+element[i-1]+max>max)
                    max+=element[i]+element[i-1];
                else { zjedzony=i-1; break;}
            }
        }
    }
    for(i=n-1;i>zjedzony;i-=2){
        if(i==n-1)max1=element[n-1];
        else{
            if(element[i]+element[i-1]+max1>0){
                if(element[i]+element[i-1]+max1>max1)
                    max1+=element[i]+element[i-1];
                else { zjedzony=i-1; break;}
            }
        }
    }
    max+=max1;
    if(MyNodeID()!=0) {
        PutLL(0,max);
        Send(0);
    }
    else{
        for(int j=1;j<NumberOfNodes();j++){
            //int instancja=Receive(-1);
            long long tmp=GetLL(j);
            if(tmp+max>max)max+=tmp;
        }
        printf("%lld",max);
    }
    return 0;

}