#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;
}
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; } |
English