int main() { long long N = GetN(); long long nodes = NumberOfNodes(); long long my_id = MyNodeId(); long long _min = LLONG_MAX; long long _max = LLONG_MIN; int found = 0; for (long long i = my_id; i < N; i += nodes) { long long number = GetNumber(i); if(found == 0) { found = 1; _min = number; _max = number; } else { if(_min > number) { _min = number; } if(_max < number) { _max = number; } } } if (found == 1) { PutLL(MASTER_NODE, 1); PutLL(MASTER_NODE, _min); PutLL(MASTER_NODE, _max); } PutLL(MASTER_NODE, DONE); Send(MASTER_NODE); if (my_id == MASTER_NODE) { long long global_min = LLONG_MAX; long long global_max = LLONG_MIN; for (int node = 0; node < nodes; ++node) { long long received1 = 0; long long received2 = 0; Receive(node); received1 = GetLL(node); if(received1 == 1) { received1 = GetLL(node); received2 = GetLL(node); if(global_min > received1) { global_min = received1; } if(global_max < received2) { global_max = received2; } } } printf("%lld\n", global_max - global_min); } return 0; }
int main() { long long N = GetN(); long long nodes = NumberOfNodes(); long long my_id = MyNodeId(); long long best_so_far = 0LL; for (long long i = 0; i < N; ++i) { for (long long j = 0; j < N; ++j) { if (j % nodes == my_id) { long long candidate = GetNumber(i) - GetNumber(j); if (candidate > best_so_far) { best_so_far = candidate; PutLL(MASTER_NODE, candidate); Send(MASTER_NODE); } } } } PutLL(MASTER_NODE, DONE); Send(MASTER_NODE); if (my_id == MASTER_NODE) { long long global_best_so_far = 0; for (int node = 0; node < nodes; ++node) { long long received_candidate = 0; while (true) { Receive(node); received_candidate = GetLL(node); if (received_candidate == DONE) { break; } if (received_candidate > global_best_so_far) { global_best_so_far = received_candidate; } } } printf("%lld\n", global_best_so_far); } return 0; }
// This is a sample solution to the "Sum all integers" problem. Each node sums // the elements that belong to it (that is, the ones with position equal to // MyNodeId() modulo NumberOfNodes()). // // To showcase the communication a bit better, instead of sending all the // results to a "master" node, each node sends its result to the next one, // accumulating the result from the previous node. The last node prints the // final result. int main() { long long sum = 0LL; for (long long pos = MyNodeId(); pos < GetN(); pos += NumberOfNodes()) { sum += GetNumber(pos); } if (MyNodeId() > 0) { Receive(MyNodeId() - 1); sum += GetLL(MyNodeId() - 1); } if (MyNodeId() < NumberOfNodes() - 1) { PutLL(MyNodeId() + 1, sum); Send(MyNodeId() + 1); } else { printf("%lld\n", sum); } return 0; }