#include <cstdio> #include <algorithm> #include "krazki.h" #include "message.h" #include <vector> #define MAXD 109 using namespace std; typedef long long LL; vector<LL> holes, disc; // Just run on one thread, heh. int main() { if (MyNodeId() > 0) return 0; int height = PipeHeight(); int numDiscs = NumberOfDiscs(); holes.resize(height+1); disc.resize(numDiscs+1); if (numDiscs > height) { printf("0\n"); return 0; } for (int i = 1; i <= height; i++) { holes[i] = HoleDiameter(i); if (i > 1) holes[i] = min(holes[i], holes[i-1]); } for (int i = 1; i <= numDiscs; i++) { disc[i] = DiscDiameter(i); disc[i] = max(disc[i], disc[i-1]); } int discNum = 1; int holeNum = height; while (discNum <= numDiscs && holeNum >= (numDiscs - discNum + 1)) { if (disc[discNum] <= holes[holeNum]) { discNum++; } if (discNum <= numDiscs) holeNum--; } printf("%d\n", holeNum); 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 | #include <cstdio> #include <algorithm> #include "krazki.h" #include "message.h" #include <vector> #define MAXD 109 using namespace std; typedef long long LL; vector<LL> holes, disc; // Just run on one thread, heh. int main() { if (MyNodeId() > 0) return 0; int height = PipeHeight(); int numDiscs = NumberOfDiscs(); holes.resize(height+1); disc.resize(numDiscs+1); if (numDiscs > height) { printf("0\n"); return 0; } for (int i = 1; i <= height; i++) { holes[i] = HoleDiameter(i); if (i > 1) holes[i] = min(holes[i], holes[i-1]); } for (int i = 1; i <= numDiscs; i++) { disc[i] = DiscDiameter(i); disc[i] = max(disc[i], disc[i-1]); } int discNum = 1; int holeNum = height; while (discNum <= numDiscs && holeNum >= (numDiscs - discNum + 1)) { if (disc[discNum] <= holes[holeNum]) { discNum++; } if (discNum <= numDiscs) holeNum--; } printf("%d\n", holeNum); return 0; } |