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