#include "kanapka.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; typedef long long ll; int nnd; ll n; struct data{ ll su,pre,in,suf; }t; data operator+(const data&a,const data&b){ data c; c.su=a.su+b.su; c.pre=min(a.pre,a.su+b.pre); c.suf=min(b.suf,b.su+a.suf); c.in=min(min(a.in,b.in),a.suf+b.pre); return c; } int main() { n=GetN(); nnd=NumberOfNodes(); ll bg=1ll*n*MyNodeId()/nnd,ed=1ll*n*(MyNodeId()+1)/nnd; ll su=0,mipre=0,misuf=0,miin=0,cursu=0; for (ll i=bg;i<ed;i++){ ll x=GetTaste(i); su+=x; cursu+=x; if(cursu>0)cursu=0; miin=min(miin,cursu); mipre=min(mipre,su); } su=0; for (ll i=ed-1;i>=bg;i--){ ll x=GetTaste(i); su+=x; misuf=min(misuf,su); } PutLL(0,su); PutLL(0,mipre); PutLL(0,misuf); PutLL(0,miin); Send(0); if(MyNodeId()==0){ for (int i=0;i<nnd;i++){ data x; Receive(i); x.su=GetLL(i); x.pre=GetLL(i); x.suf=GetLL(i); x.in=GetLL(i); t=t+x; } cout<<t.su-t.in<<endl; } 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 | #include "kanapka.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; typedef long long ll; int nnd; ll n; struct data{ ll su,pre,in,suf; }t; data operator+(const data&a,const data&b){ data c; c.su=a.su+b.su; c.pre=min(a.pre,a.su+b.pre); c.suf=min(b.suf,b.su+a.suf); c.in=min(min(a.in,b.in),a.suf+b.pre); return c; } int main() { n=GetN(); nnd=NumberOfNodes(); ll bg=1ll*n*MyNodeId()/nnd,ed=1ll*n*(MyNodeId()+1)/nnd; ll su=0,mipre=0,misuf=0,miin=0,cursu=0; for (ll i=bg;i<ed;i++){ ll x=GetTaste(i); su+=x; cursu+=x; if(cursu>0)cursu=0; miin=min(miin,cursu); mipre=min(mipre,su); } su=0; for (ll i=ed-1;i>=bg;i--){ ll x=GetTaste(i); su+=x; misuf=min(misuf,su); } PutLL(0,su); PutLL(0,mipre); PutLL(0,misuf); PutLL(0,miin); Send(0); if(MyNodeId()==0){ for (int i=0;i<nnd;i++){ data x; Receive(i); x.su=GetLL(i); x.pre=GetLL(i); x.suf=GetLL(i); x.in=GetLL(i); t=t+x; } cout<<t.su-t.in<<endl; } return 0; } |