Submission #521236

#TimeUsernameProblemLanguageResultExecution timeMemory
521236Alex_tz307Robots (IOI13_robots)C++17
76 / 100
3068 ms28916 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<tuple<int, int, int>> toys(T); for (int i = 0; i < T; ++i) { toys[i] = make_tuple(W[i], S[i], i); } auto check = [&](const int &m) -> int { sort(toys.begin(), toys.end()); vector<bool> taken(T); priority_queue<pair<int, int>> pq; int p = 0; for (int i = 0; i < A; ++i) { while (p < T && get<0>(toys[p]) < X[i]) { pq.emplace(get<1>(toys[p]), get<2>(toys[p])); p += 1; } int cnt = 0; while (!pq.empty() && cnt < m) { taken[pq.top().second] = true; cnt += 1; pq.pop(); } } sort(toys.begin(), toys.end(), [&](const tuple<int, int, int> &x, const tuple<int, int, int> &y) { return get<1>(x) < get<1>(y); }); p = 0; queue<int> q; for (int i = 0; i < B; ++i) { while (p < T && get<1>(toys[p]) < Y[i]) { if (!taken[get<2>(toys[p])]) { q.emplace(get<2>(toys[p])); } p += 1; } int cnt = 0; while (!q.empty() && cnt < m) { taken[q.front()] = true; cnt += 1; q.pop(); } } for (int i = 0; i < T; ++i) { if (!taken[i]) { return false; } } return true; }; int l = 1, r = T, ans = -1; while (l <= r) { int mid = (l + r) / 2; if (check(mid)) { ans = mid; r = mid - 1; } else { l = mid + 1; } } return ans; }
#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...