#ifdef _MSC_VER
#pragma warning(disable: 4996)
#endif
#include "message.h"
#include "maklib.h"
#include <iostream>
using namespace std;
void Calculate(long long& result, long long& current, int first, int last) {
for(int i = first; i < last; ++i) {
if(current > 0)
current += ElementAt(i);
else
current = ElementAt(i);
if(result < current)
result = current;
}
}
int main() {
int id = MyNodeId();
int nodes = NumberOfNodes();
int size = Size();
int first = static_cast<long long>(id) * size / nodes + 1;
int last = static_cast<long long>(id + 1) * size / nodes + 1;
long long result = 0;
long long current = 0;
if(id > 0) {
int source = Receive(id - 1);
current = GetLL(source);
result = GetLL(source);
}
Calculate(result, current, first, last);
if(last > size)
cout << result << '\n';
else {
PutLL(id + 1, current);
PutLL(id + 1, result);
Send(id + 1);
}
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 | #ifdef _MSC_VER #pragma warning(disable: 4996) #endif #include "message.h" #include "maklib.h" #include <iostream> using namespace std; void Calculate(long long& result, long long& current, int first, int last) { for(int i = first; i < last; ++i) { if(current > 0) current += ElementAt(i); else current = ElementAt(i); if(result < current) result = current; } } int main() { int id = MyNodeId(); int nodes = NumberOfNodes(); int size = Size(); int first = static_cast<long long>(id) * size / nodes + 1; int last = static_cast<long long>(id + 1) * size / nodes + 1; long long result = 0; long long current = 0; if(id > 0) { int source = Receive(id - 1); current = GetLL(source); result = GetLL(source); } Calculate(result, current, first, last); if(last > size) cout << result << '\n'; else { PutLL(id + 1, current); PutLL(id + 1, result); Send(id + 1); } return 0; } |
English