#include "maklib.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; int main() { int ja=MyNodeId(), poczatek=(ja*(long long) Size())/NumberOfNodes(), koniec=((ja+1LL)*Size())/NumberOfNodes(); long long lewa=0, minLewa=0, prawa=0, srodek=0, wszystko=0, biez=0; for (int i=poczatek; i<koniec; ++i) { int x=ElementAt(i+1); wszystko+=x; lewa=max(lewa, wszystko); minLewa=min(minLewa, wszystko); biez=max(biez+x, 0LL); srodek=max(srodek, biez); } prawa=max(0LL, wszystko-minLewa); if (ja>0) { Receive(ja-1); long long pPrawa=GetLL(ja-1), pSrodek=GetLL(ja-1); srodek=max(pSrodek, max(srodek, pPrawa+lewa)); prawa=max(prawa, wszystko+pPrawa); } if (ja<NumberOfNodes()-1) { PutLL(ja+1, prawa); PutLL(ja+1, srodek); Send(ja+1); } if (ja==NumberOfNodes()-1) cout<<srodek<<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 | #include "maklib.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; int main() { int ja=MyNodeId(), poczatek=(ja*(long long) Size())/NumberOfNodes(), koniec=((ja+1LL)*Size())/NumberOfNodes(); long long lewa=0, minLewa=0, prawa=0, srodek=0, wszystko=0, biez=0; for (int i=poczatek; i<koniec; ++i) { int x=ElementAt(i+1); wszystko+=x; lewa=max(lewa, wszystko); minLewa=min(minLewa, wszystko); biez=max(biez+x, 0LL); srodek=max(srodek, biez); } prawa=max(0LL, wszystko-minLewa); if (ja>0) { Receive(ja-1); long long pPrawa=GetLL(ja-1), pSrodek=GetLL(ja-1); srodek=max(pSrodek, max(srodek, pPrawa+lewa)); prawa=max(prawa, wszystko+pPrawa); } if (ja<NumberOfNodes()-1) { PutLL(ja+1, prawa); PutLL(ja+1, srodek); Send(ja+1); } if (ja==NumberOfNodes()-1) cout<<srodek<<endl; return 0; } |