Submission #521193

#TimeUsernameProblemLanguageResultExecution timeMemory
521193Alex_tz307Robots (IOI13_robots)C++17
0 / 100
1 ms300 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; int cnt = 0; for (int i = 0; i < B; ++i) { while (p < T && get<1>(toys[p]) < Y[i]) { cnt += !taken[get<2>(toys[p])]; p += 1; } cnt -= m; if (cnt < 0) { cnt = 0; } } if (cnt == 0) { return true; } return false; }; 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...