#include<stdio.h>
#include<vector>
#include<algorithm>
#include "kanapka.h"
#include "message.h"
#define ll long long
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define sc scanf
#define pr printf
using namespace std;
ll GT(int x){
    return GetTaste((ll)(x));
}
int main (){
    int n=(int)(GetN());
    int b=0;
    int e=n;
    const int id=MyNodeId();
    const int nn=NumberOfNodes();
    int p=n/nn;
    b=p*id;
    if(id!=nn-1)e=p*(id+1);
    ll pp=0,mi=0;
    for(int i=b;i<e;i++){
        pp+=GT(i);
        mi=min(mi,pp);
    }
    ll cm=0,cp=0,su;
    if(id>0){
        PutLL(0,mi);
        PutLL(0,pp);
        Send(0);
        Receive(0);
        cm=GetLL(0);
        cp=GetLL(0);
    }
    if(id==0){
        ll p1[nn],p2[nn+1];
        p1[0]=pp;
        for(int i=1;i<nn;i++){
            Receive(i);
            p2[i]=GetLL(i);
            p1[i]=GetLL(i);
        }
        for(int i=1;i<nn;i++)p1[i]+=p1[i-1];
        for(int i=1;i<=nn;i++)p2[i]+=p1[i-1];
        for(int i=nn-1;i>0;i--)p2[i]=min(p2[i],p2[i+1]);
        for(int i=1;i<nn;i++){
            PutLL(i,p2[i+1]);
            PutLL(i,p1[i-1]);
            Send(i);
        }
        cm=p2[1];
        su=p1[nn-1];
    }
    pp+=cp;
    ll w=0;
    for(int i=e-1;i>=b;i--){
        w=min(w,cm-pp);
        cm=min(pp,cm);
        pp-=GT(i);
    }
    if(id==0){
        w=min(w,cm);
        for(int i=1;i<nn;i++){
            Receive(i);
            w=min(w,GetLL(i));
        }
        printf("%lld",su-w);
    }
    else{
        PutLL(0,w);
        Send(0);
    }
    return 0;
}
        | 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 81 82 | #include<stdio.h> #include<vector> #include<algorithm> #include "kanapka.h" #include "message.h" #define ll long long #define pb push_back #define mp make_pair #define f first #define s second #define sc scanf #define pr printf using namespace std; ll GT(int x){ return GetTaste((ll)(x)); } int main (){ int n=(int)(GetN()); int b=0; int e=n; const int id=MyNodeId(); const int nn=NumberOfNodes(); int p=n/nn; b=p*id; if(id!=nn-1)e=p*(id+1); ll pp=0,mi=0; for(int i=b;i<e;i++){ pp+=GT(i); mi=min(mi,pp); } ll cm=0,cp=0,su; if(id>0){ PutLL(0,mi); PutLL(0,pp); Send(0); Receive(0); cm=GetLL(0); cp=GetLL(0); } if(id==0){ ll p1[nn],p2[nn+1]; p1[0]=pp; for(int i=1;i<nn;i++){ Receive(i); p2[i]=GetLL(i); p1[i]=GetLL(i); } for(int i=1;i<nn;i++)p1[i]+=p1[i-1]; for(int i=1;i<=nn;i++)p2[i]+=p1[i-1]; for(int i=nn-1;i>0;i--)p2[i]=min(p2[i],p2[i+1]); for(int i=1;i<nn;i++){ PutLL(i,p2[i+1]); PutLL(i,p1[i-1]); Send(i); } cm=p2[1]; su=p1[nn-1]; } pp+=cp; ll w=0; for(int i=e-1;i>=b;i--){ w=min(w,cm-pp); cm=min(pp,cm); pp-=GT(i); } if(id==0){ w=min(w,cm); for(int i=1;i<nn;i++){ Receive(i); w=min(w,GetLL(i)); } printf("%lld",su-w); } else{ PutLL(0,w); Send(0); } return 0; } | 
 
            
         English
                    English