#include <cstdlib>
#include <iostream>
#include "krazki.h"
#include "message.h"
int main() {
int N = PipeHeight();
int node_size = NumberOfNodes();
if (N < node_size)
{
node_size = 1;
}
// Faza pierwsza.
int poczatek = (MyNodeId() * N) / node_size;
int koniec = ((MyNodeId() + 1) * N) / node_size;
int size = koniec - poczatek;
int tab[size];
for (long long i = poczatek; i < koniec; ++i) {
tab[i - poczatek] = HoleDiameter(i);
}
int D = NumberOfDiscs();
int depth = 0;
for (int i = 0; i < D; i++) {
long DD = DiscDiameter(i);
for (long long i = poczatek; i < koniec; ++i) {
if (tab[i - poczatek] >= DD) {
depth = i + poczatek;
koniec--;
} else {
koniec = i + poczatek;
if (i == poczatek) {
break;
}
}
}
}
if (MyNodeId() > 0) {
PutInt(0, depth);
Send(0);
} else {
int tw[node_size];
tw[0] = depth;
for (int i = 1; i < NumberOfNodes(); ++i) {
int instancja = Receive(-1);
tw[instancja] = GetInt(instancja);
}
int max = 0;
for (int i = 1; i < node_size; ++i) {
int koniec = ((i + 1) * N) / node_size;
if (tw[i] < koniec) {
max = tw[i];
break;
}
}
std::cout << max;
}
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 | #include <cstdlib> #include <iostream> #include "krazki.h" #include "message.h" int main() { int N = PipeHeight(); int node_size = NumberOfNodes(); if (N < node_size) { node_size = 1; } // Faza pierwsza. int poczatek = (MyNodeId() * N) / node_size; int koniec = ((MyNodeId() + 1) * N) / node_size; int size = koniec - poczatek; int tab[size]; for (long long i = poczatek; i < koniec; ++i) { tab[i - poczatek] = HoleDiameter(i); } int D = NumberOfDiscs(); int depth = 0; for (int i = 0; i < D; i++) { long DD = DiscDiameter(i); for (long long i = poczatek; i < koniec; ++i) { if (tab[i - poczatek] >= DD) { depth = i + poczatek; koniec--; } else { koniec = i + poczatek; if (i == poczatek) { break; } } } } if (MyNodeId() > 0) { PutInt(0, depth); Send(0); } else { int tw[node_size]; tw[0] = depth; for (int i = 1; i < NumberOfNodes(); ++i) { int instancja = Receive(-1); tw[instancja] = GetInt(instancja); } int max = 0; for (int i = 1; i < node_size; ++i) { int koniec = ((i + 1) * N) / node_size; if (tw[i] < koniec) { max = tw[i]; break; } } std::cout << max; } return 0; } |
English