#define NDEBUG
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <limits>
#include <climits>
#include <map>
#include <set>
#include <vector>
#include <cassert>
#include "message.h"
#include "kollib.h"
const long long LLMAX = (std::numeric_limits<long long>()).max();
const long long LLMIN = (std::numeric_limits<long long>()).min();
const int None = -1;
const int MaxResultsLen = 200;
int results[MaxResultsLen];
int main()
{
std::ios_base::sync_with_stdio(false);
int numberOfNodes = NumberOfNodes();
int myId = MyNodeId();
int numberOfStudents = NumberOfStudents();
int numberOfQueries = NumberOfQueries();
for (int i=1+myId; i <= numberOfQueries; i+=numberOfNodes) {
int from = QueryFrom(i);
int to = QueryTo(i);
int prev = None;
int curr = from;
int count = 0;
while (curr != to) {
int next = FirstNeighbor(curr);
if (next == prev) {
next = SecondNeighbor(curr);
}
prev = curr;
curr = next;
++count;
}
if (count > numberOfStudents / 2) {
count = numberOfStudents - count;
}
PutInt(0, i);
PutInt(0, count);
Send(0);
}
if (myId == 0) {
for (int i=0; i < numberOfQueries; ++i) {
int inst = Receive(-1);
int q = GetInt(inst);
int count = GetInt(inst);
results[q - 1] = count;
}
for (int i=0; i < numberOfQueries; ++i) {
printf("%d\n", results[i]);
}
}
}
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 68 69 70 71 72 73 74 | #define NDEBUG #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <limits> #include <climits> #include <map> #include <set> #include <vector> #include <cassert> #include "message.h" #include "kollib.h" const long long LLMAX = (std::numeric_limits<long long>()).max(); const long long LLMIN = (std::numeric_limits<long long>()).min(); const int None = -1; const int MaxResultsLen = 200; int results[MaxResultsLen]; int main() { std::ios_base::sync_with_stdio(false); int numberOfNodes = NumberOfNodes(); int myId = MyNodeId(); int numberOfStudents = NumberOfStudents(); int numberOfQueries = NumberOfQueries(); for (int i=1+myId; i <= numberOfQueries; i+=numberOfNodes) { int from = QueryFrom(i); int to = QueryTo(i); int prev = None; int curr = from; int count = 0; while (curr != to) { int next = FirstNeighbor(curr); if (next == prev) { next = SecondNeighbor(curr); } prev = curr; curr = next; ++count; } if (count > numberOfStudents / 2) { count = numberOfStudents - count; } PutInt(0, i); PutInt(0, count); Send(0); } if (myId == 0) { for (int i=0; i < numberOfQueries; ++i) { int inst = Receive(-1); int q = GetInt(inst); int count = GetInt(inst); results[q - 1] = count; } for (int i=0; i < numberOfQueries; ++i) { printf("%d\n", results[i]); } } } |
English