#include <iostream>
#include "message.h"
#include "kollib.h"
#include <vector>
#include <cstdlib>
#include <cstdio>
using namespace std;
void wykonaj() {
vector<int> queryFroms;
vector<int> queryTos;
int n = NumberOfStudents(), k = NumberOfQueries();
for (int i = MyNodeId(); i < k; i += NumberOfNodes()) {
queryFroms.push_back(QueryFrom(i + 1));
queryTos.push_back(QueryTo(i + 1));
}
int wyniki1[queryFroms.size()];
int wyniki2[queryTos.size()];
int poprzedni = SecondNeighbor(1);
int cur = 1, tmp;
int ktory = 0;
do {
for (int i = 0; i < queryFroms.size(); i++) {
if (cur == queryFroms[i]) {
wyniki1[i] = ktory;
}
}
for (int i = 0; i < queryTos.size(); i++) {
if (cur == queryTos[i]) {
wyniki2[i] = ktory;
}
}
ktory++;
tmp = cur;
if (SecondNeighbor(cur) == poprzedni) {
cur = FirstNeighbor(cur);
} else cur = SecondNeighbor(cur);
poprzedni = tmp;
} while (cur != 1);
int tmpWynik;
int index = 0;
for (int i = MyNodeId(); i < k; i += NumberOfNodes()) {
tmpWynik = wyniki1[index] - wyniki2[index];
tmpWynik = tmpWynik > 0 ? tmpWynik : -tmpWynik;
PutInt(0, (tmpWynik < (n - tmpWynik) ? tmpWynik : n - tmpWynik));
index++;
}
Send(0);
}
int main() {
int numer = MyNodeId();
wykonaj();
int k = NumberOfQueries();
if (numer == 0) {
int wyniki[k];
for (int i = 0; i < NumberOfNodes(); i++) {
for (int j = i; j < k; j += NumberOfNodes()) {
if (j == i) Receive(i);
wyniki[j] = GetInt(i);
}
}
for (int i = 0; i < k; i++) {
printf("%d\n", wyniki[i]);
}
}
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <iostream> #include "message.h" #include "kollib.h" #include <vector> #include <cstdlib> #include <cstdio> using namespace std; void wykonaj() { vector<int> queryFroms; vector<int> queryTos; int n = NumberOfStudents(), k = NumberOfQueries(); for (int i = MyNodeId(); i < k; i += NumberOfNodes()) { queryFroms.push_back(QueryFrom(i + 1)); queryTos.push_back(QueryTo(i + 1)); } int wyniki1[queryFroms.size()]; int wyniki2[queryTos.size()]; int poprzedni = SecondNeighbor(1); int cur = 1, tmp; int ktory = 0; do { for (int i = 0; i < queryFroms.size(); i++) { if (cur == queryFroms[i]) { wyniki1[i] = ktory; } } for (int i = 0; i < queryTos.size(); i++) { if (cur == queryTos[i]) { wyniki2[i] = ktory; } } ktory++; tmp = cur; if (SecondNeighbor(cur) == poprzedni) { cur = FirstNeighbor(cur); } else cur = SecondNeighbor(cur); poprzedni = tmp; } while (cur != 1); int tmpWynik; int index = 0; for (int i = MyNodeId(); i < k; i += NumberOfNodes()) { tmpWynik = wyniki1[index] - wyniki2[index]; tmpWynik = tmpWynik > 0 ? tmpWynik : -tmpWynik; PutInt(0, (tmpWynik < (n - tmpWynik) ? tmpWynik : n - tmpWynik)); index++; } Send(0); } int main() { int numer = MyNodeId(); wykonaj(); int k = NumberOfQueries(); if (numer == 0) { int wyniki[k]; for (int i = 0; i < NumberOfNodes(); i++) { for (int j = i; j < k; j += NumberOfNodes()) { if (j == i) Receive(i); wyniki[j] = GetInt(i); } } for (int i = 0; i < k; i++) { printf("%d\n", wyniki[i]); } } return 0; } |
English