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