#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; } |