#include "krazki.h" #include "message.h" #include <deque> #include <utility> #include <algorithm> #include <cstdio> using namespace std; deque< pair<long long, long long> > kolej; long long ID, nrOfNodes, n, k, hole_diam, level; long long akt_krazek = 1, akt_diam, ret; int main() { ID = MyNodeId(); nrOfNodes = NumberOfNodes(); n = PipeHeight(); k = NumberOfDiscs(); /* fromD = (nrOfNodes - id - 1)*(k/nrOfNodes) + 1; if (id == 0) uptoD = k; else uptoD = (nrOfNodes - id)*(k/nrOfNodes); */ if (ID == 0) { akt_diam = DiscDiameter(akt_krazek); for (long long i = 1; i <= n + 1; i++) { if (i <= n) hole_diam = HoleDiameter(i); else hole_diam = 0; if (kolej.empty()) kolej.push_front({hole_diam, i}); else { if (hole_diam < kolej.front().first) { kolej.push_front({hole_diam, i}); } } if (akt_diam > hole_diam) { kolej.pop_front(); kolej.push_front({0, i-1}); ret = i - 1; akt_krazek++; break; } } while (akt_krazek <= k && ret > 0) { akt_diam = DiscDiameter(akt_krazek); while(!kolej.empty()) { if (akt_diam > kolej.front().first) { ret = kolej.front().second - 1; kolej.pop_front(); } else { break; } } kolej.push_front({0, ret}); akt_krazek++; } printf("%lld\n", ret); } 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 | #include "krazki.h" #include "message.h" #include <deque> #include <utility> #include <algorithm> #include <cstdio> using namespace std; deque< pair<long long, long long> > kolej; long long ID, nrOfNodes, n, k, hole_diam, level; long long akt_krazek = 1, akt_diam, ret; int main() { ID = MyNodeId(); nrOfNodes = NumberOfNodes(); n = PipeHeight(); k = NumberOfDiscs(); /* fromD = (nrOfNodes - id - 1)*(k/nrOfNodes) + 1; if (id == 0) uptoD = k; else uptoD = (nrOfNodes - id)*(k/nrOfNodes); */ if (ID == 0) { akt_diam = DiscDiameter(akt_krazek); for (long long i = 1; i <= n + 1; i++) { if (i <= n) hole_diam = HoleDiameter(i); else hole_diam = 0; if (kolej.empty()) kolej.push_front({hole_diam, i}); else { if (hole_diam < kolej.front().first) { kolej.push_front({hole_diam, i}); } } if (akt_diam > hole_diam) { kolej.pop_front(); kolej.push_front({0, i-1}); ret = i - 1; akt_krazek++; break; } } while (akt_krazek <= k && ret > 0) { akt_diam = DiscDiameter(akt_krazek); while(!kolej.empty()) { if (akt_diam > kolej.front().first) { ret = kolej.front().second - 1; kolej.pop_front(); } else { break; } } kolej.push_front({0, ret}); akt_krazek++; } printf("%lld\n", ret); } return 0; } |