#include "kanapka.h"
#include "message.h"
#include <algorithm>
#include <iostream>
using namespace std;
long long n;
long long myID;
int main() {
long long nodes = NumberOfNodes();
myID = MyNodeId();
n = GetN();
int from, to;
from = n * myID / nodes;
to = n * (myID + 1) / nodes;
long long minMid = 0, minPref = 0, minSuff = 0, sum = 0;
for (int i = from; i < to; i++) {
int taste = GetTaste(i);
sum += taste;
minSuff = min(minSuff + taste, 0ll);
minPref = min(minPref, sum);
minMid = min(minMid, minSuff);
}
switch (myID) {
case 0: {
for (int i = 1; i < nodes; i++) {
long long suff, pref, s, mid;
Receive(i);
s = GetLL(i);
pref = GetLL(i);
suff = GetLL(i);
mid = GetLL(i);
minMid = min(min(minMid, mid), minSuff + pref);
minSuff = min(minSuff + s, suff);
minPref = min(minPref, sum + pref);
sum += s;
}
cout << (sum - minMid > 0ll ? sum - minMid : 0ll) << "\n";
break;
}
default: {
PutLL(0, sum);
PutLL(0, minPref);
PutLL(0, minSuff);
PutLL(0, minMid);
Send(0);
}
}
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 | #include "kanapka.h" #include "message.h" #include <algorithm> #include <iostream> using namespace std; long long n; long long myID; int main() { long long nodes = NumberOfNodes(); myID = MyNodeId(); n = GetN(); int from, to; from = n * myID / nodes; to = n * (myID + 1) / nodes; long long minMid = 0, minPref = 0, minSuff = 0, sum = 0; for (int i = from; i < to; i++) { int taste = GetTaste(i); sum += taste; minSuff = min(minSuff + taste, 0ll); minPref = min(minPref, sum); minMid = min(minMid, minSuff); } switch (myID) { case 0: { for (int i = 1; i < nodes; i++) { long long suff, pref, s, mid; Receive(i); s = GetLL(i); pref = GetLL(i); suff = GetLL(i); mid = GetLL(i); minMid = min(min(minMid, mid), minSuff + pref); minSuff = min(minSuff + s, suff); minPref = min(minPref, sum + pref); sum += s; } cout << (sum - minMid > 0ll ? sum - minMid : 0ll) << "\n"; break; } default: { PutLL(0, sum); PutLL(0, minPref); PutLL(0, minSuff); PutLL(0, minMid); Send(0); } } return 0; } |
English