#include <iostream> #include "kanapka.h" #include "message.h" using namespace std; int main() { int nodes=NumberOfNodes(); int myNode=MyNodeId(); long long int N=GetN(); long long int minl, minp, all, cur, pom, pom2, minlocal; minl=minp=all=cur=minlocal=pom2=0; for(int i = (myNode*N)/nodes; i<((myNode+1)*N)/nodes; i++){ pom=GetTaste(i); cur+=pom; pom2+=pom; if(pom2>0)pom2=0; else if(pom2<minlocal)minlocal=pom2; if(cur<minl)minl=cur; } all=cur; cur=0; for(int i=((myNode+1)*N)/nodes-1; i>=((myNode)*N)/nodes; i--){ cur+=GetTaste(i); if(cur<minp)minp=cur; } /* cout << minlocal << " "; cout << minl << " "; cout << all << " "; cout << minp << " ";*/ if(myNode){ PutLL(0, minlocal); PutLL(0, minl); PutLL(0, all); PutLL(0, minp); Send(0); } else{ long long int ol [100]; long long int al [100]; long long int op [100]; long long int minimum=minlocal; ol[0]=minl; al[0]=all; op[0]=minp; cur=minl=minp=0; for(int i=1; i<nodes; i++){ Receive(i); cur= GetLL(i); if(cur<minimum) minimum=cur; ol[i] = GetLL(i); al[i] = GetLL(i); op[i] = GetLL(i); } for(int i = 0; i<nodes; i++){ cur=0; cur+=op[i]; for(int j = i+1; j<nodes; j++){ cur+=ol[j]; if(cur<minimum) minimum=cur; cur-=ol[j]; cur+=al[j]; } } all=0; for(int i=0; i<nodes; i++) all+=al[i]; cout << all-minimum; } 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 79 80 | #include <iostream> #include "kanapka.h" #include "message.h" using namespace std; int main() { int nodes=NumberOfNodes(); int myNode=MyNodeId(); long long int N=GetN(); long long int minl, minp, all, cur, pom, pom2, minlocal; minl=minp=all=cur=minlocal=pom2=0; for(int i = (myNode*N)/nodes; i<((myNode+1)*N)/nodes; i++){ pom=GetTaste(i); cur+=pom; pom2+=pom; if(pom2>0)pom2=0; else if(pom2<minlocal)minlocal=pom2; if(cur<minl)minl=cur; } all=cur; cur=0; for(int i=((myNode+1)*N)/nodes-1; i>=((myNode)*N)/nodes; i--){ cur+=GetTaste(i); if(cur<minp)minp=cur; } /* cout << minlocal << " "; cout << minl << " "; cout << all << " "; cout << minp << " ";*/ if(myNode){ PutLL(0, minlocal); PutLL(0, minl); PutLL(0, all); PutLL(0, minp); Send(0); } else{ long long int ol [100]; long long int al [100]; long long int op [100]; long long int minimum=minlocal; ol[0]=minl; al[0]=all; op[0]=minp; cur=minl=minp=0; for(int i=1; i<nodes; i++){ Receive(i); cur= GetLL(i); if(cur<minimum) minimum=cur; ol[i] = GetLL(i); al[i] = GetLL(i); op[i] = GetLL(i); } for(int i = 0; i<nodes; i++){ cur=0; cur+=op[i]; for(int j = i+1; j<nodes; j++){ cur+=ol[j]; if(cur<minimum) minimum=cur; cur-=ol[j]; cur+=al[j]; } } all=0; for(int i=0; i<nodes; i++) all+=al[i]; cout << all-minimum; } return 0; } |