Submission #681144

#TimeUsernameProblemLanguageResultExecution timeMemory
681144nutellaRobots (IOI13_robots)C++17
100 / 100
2278 ms27996 KiB
#include <bits/stdc++.h> #include "robots.h" using namespace std; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X + A), sort(Y, Y + B); vector<int> ordW(T), ordS(T); iota(ordW.begin(), ordW.end(), 0); ordS = ordW; sort(ordW.begin(), ordW.end(), [&](int i, int j) { return W[i] < W[j]; }); sort(ordS.begin(), ordS.end(), [&](int i, int j) { return S[i] < S[j]; }); auto check = [&](int mid) { vector<bool> used(T); int pnt = 0; priority_queue<pair<int, int>> st; for (int i = 0; i < A; ++i) { while (pnt < T && W[ordW[pnt]] < X[i]) { st.emplace(S[ordW[pnt]], pnt); ++pnt; } int cnt = 0; while (cnt < mid && !st.empty()) { int j = st.top().second; st.pop(); cnt += !used[ordW[j]]; used[ordW[j]] = true; } } pnt = 0; for (int i = 0; i < B; ++i) { int cnt = 0; while (cnt < mid && pnt < T && S[ordS[pnt]] < Y[i]) { cnt += !used[ordS[pnt]]; used[ordS[pnt]] = true; ++pnt; } } return (*min_element(used.begin(), used.end())) == true; }; for (int i = 0; i < T; ++i) { if ((!A || X[A - 1] <= W[i]) && (!B || Y[B - 1] <= S[i])) { return -1; } } assert(check(T)); int lo = 0, hi = T; while (lo + 1 < hi) { int mid = (lo + hi) / 2; if (check(mid)) { hi = mid; } else { lo = mid; } } return hi; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...