#include "message.h" #include "maklib.h" #include<iostream> using namespace std; int main() { int N=Size(); int pocz,kon; if(MyNodeId() > 0) { pocz=((MyNodeId()-1)*N)/(NumberOfNodes()-1); kon=((MyNodeId() ) * N) /(NumberOfNodes()-1); long long int sum=0; long long int sum2=0; long long int max2=0; for(int i=pocz;i<kon;i++) { sum2=sum2+ElementAt(i+1); if(max2<sum2) { max2=sum2; } if(sum+ElementAt(i+1)>0) { sum=sum+ElementAt(i+1); } else { sum=0; } } PutLL(0,max2); PutLL(0,sum); PutLL(0,sum2); Send(0); } else { long long int odeb; long long int sumk=0; long long int maxim=0; long long int max22=0; long long int sum22; for(int i=1;i<NumberOfNodes();i++) { Receive(i); max22=GetLL(i); if(maxim<sumk+max22) { maxim=sumk+max22; } odeb=GetLL(i); sum22=GetLL(i); if(sumk+sum22>odeb) { sumk=sumk+sum22; } else { sumk=odeb; } if(sumk>maxim) { maxim=sumk; } } cout<<maxim; } 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 | #include "message.h" #include "maklib.h" #include<iostream> using namespace std; int main() { int N=Size(); int pocz,kon; if(MyNodeId() > 0) { pocz=((MyNodeId()-1)*N)/(NumberOfNodes()-1); kon=((MyNodeId() ) * N) /(NumberOfNodes()-1); long long int sum=0; long long int sum2=0; long long int max2=0; for(int i=pocz;i<kon;i++) { sum2=sum2+ElementAt(i+1); if(max2<sum2) { max2=sum2; } if(sum+ElementAt(i+1)>0) { sum=sum+ElementAt(i+1); } else { sum=0; } } PutLL(0,max2); PutLL(0,sum); PutLL(0,sum2); Send(0); } else { long long int odeb; long long int sumk=0; long long int maxim=0; long long int max22=0; long long int sum22; for(int i=1;i<NumberOfNodes();i++) { Receive(i); max22=GetLL(i); if(maxim<sumk+max22) { maxim=sumk+max22; } odeb=GetLL(i); sum22=GetLL(i); if(sumk+sum22>odeb) { sumk=sumk+sum22; } else { sumk=odeb; } if(sumk>maxim) { maxim=sumk; } } cout<<maxim; } return 0; } |