Пример #1
0
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;
}
Пример #3
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;
}