#include <iostream> #include "kanapka.h" #include "message.h" using namespace std; int main() { ios_base::sync_with_stdio(0);cout.tie(NULL); long long N = GetN(); int nodes = NumberOfNodes(); int myNode = MyNodeId(); if(N < 2 * NumberOfNodes() && MyNodeId() == 0) { long long max1 = 0,max2 = 0; long long sum1 = 0,sum2 = 0; for(long long i = 0;i < N/2 + 1;i++) { sum1 += GetTaste(i); if(i != N - i - 1)sum2 += GetTaste(N - i - 1); if(sum1 > max1)max1 = sum1; if(sum2 > max2)max2 = sum2; } cout<<max1 + max2; } else if(N >= 2 * nodes) { long long range = N / (2 * nodes); long long p = range * myNode; long long q = range * (myNode + 1); if(myNode == nodes - 1)q += (N - nodes * 2)/2; long long max1 = 0; long long max2 = 0; long long sum1 = 0; long long sum2 = 0; for(int i = p;i < q;i++) { sum1 += GetTaste(i); if(i != N- i - 1)sum2 += GetTaste(N - i - 1); if(sum1 > max1)max1 = sum1; if(sum2 > max2)max2 = sum2; } PutLL(0, max1); PutLL(0, max2); PutLL(0, sum1); PutLL(0, sum2); Send(0); } if(myNode == 0) { long long B1 = 0, B2 = 0; int sum1 = 0, sum2 = 0; for(int i = 0;i < nodes;i++) { Receive(i); long long M1 = GetLL(i); long long M2 = GetLL(i); long long S1 = GetLL(i); long long S2 = GetLL(i); if(sum1 + M1 > B1)B1 = sum1 + M1; if(sum2 + M2 > B2)B1 = sum1 + M1; sum1 += S1; sum2 += S2; cout<<B1 + B2; } } }
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 | #include <iostream> #include "kanapka.h" #include "message.h" using namespace std; int main() { ios_base::sync_with_stdio(0);cout.tie(NULL); long long N = GetN(); int nodes = NumberOfNodes(); int myNode = MyNodeId(); if(N < 2 * NumberOfNodes() && MyNodeId() == 0) { long long max1 = 0,max2 = 0; long long sum1 = 0,sum2 = 0; for(long long i = 0;i < N/2 + 1;i++) { sum1 += GetTaste(i); if(i != N - i - 1)sum2 += GetTaste(N - i - 1); if(sum1 > max1)max1 = sum1; if(sum2 > max2)max2 = sum2; } cout<<max1 + max2; } else if(N >= 2 * nodes) { long long range = N / (2 * nodes); long long p = range * myNode; long long q = range * (myNode + 1); if(myNode == nodes - 1)q += (N - nodes * 2)/2; long long max1 = 0; long long max2 = 0; long long sum1 = 0; long long sum2 = 0; for(int i = p;i < q;i++) { sum1 += GetTaste(i); if(i != N- i - 1)sum2 += GetTaste(N - i - 1); if(sum1 > max1)max1 = sum1; if(sum2 > max2)max2 = sum2; } PutLL(0, max1); PutLL(0, max2); PutLL(0, sum1); PutLL(0, sum2); Send(0); } if(myNode == 0) { long long B1 = 0, B2 = 0; int sum1 = 0, sum2 = 0; for(int i = 0;i < nodes;i++) { Receive(i); long long M1 = GetLL(i); long long M2 = GetLL(i); long long S1 = GetLL(i); long long S2 = GetLL(i); if(sum1 + M1 > B1)B1 = sum1 + M1; if(sum2 + M2 > B2)B1 = sum1 + M1; sum1 += S1; sum2 += S2; cout<<B1 + B2; } } } |