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 <iostream>
#include <cstdio>
#include "message.h"
#include "kanapka.h"
using namespace std;
const long long INF=1e18;
long long sum;
long long n, p, k, dziel, nr;
int main()
{
        dziel=NumberOfNodes();
        nr=MyNodeId();
        n=GetN();
        long long il=n/dziel;
        if(dziel%n!=0) il++;
        p=nr*il;
        k=p+il-1;
        k=min(k,n-1);
        long long maks=0;
        long long mini1=INF, mini2=INF;
        for(int i=p;i<=k;i++)
        {
                sum+=GetTaste(i);
                maks=max(maks,sum);
                mini1=min(mini1,sum);
                mini2=min(mini2,sum-maks);
        }
        if(nr!=0)
        {
                PutLL(0,mini1);
                PutLL(0,mini2);
                PutLL(0,maks);
                PutLL(0,sum);
                Send(0);
        }
        if(nr==0)
        {
                long long ans=mini2;
                long long sum2=sum;
                for(int i=1;i<dziel;i++)
                {
                        Receive(i);
                        mini1=GetLL(i);
                        mini2=GetLL(i);
                        mini1-=maks-sum2;
                        ans=min(mini1,ans);
                        ans=min(mini2,ans);
                        maks=max(maks,sum2+GetLL(i));
                        sum2+=GetLL(i);
                }
                sum2-=ans;
                printf("%lld", sum2);
        }
        return 0;
}