Submission #729652

#TimeUsernameProblemLanguageResultExecution timeMemory
729652NeroZeinRobots (IOI13_robots)C++17
39 / 100
444 ms65536 KiB
#include "robots.h" #include <bits/stdc++.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<pair<int, int>> toy(T); for (int i = 0; i < T; ++i) { toy[i] = {W[i], S[i]}; } sort(toy.begin(), toy.end(), greater<pair<int, int>>()); auto ch = [&](int mid) { multiset<int> se; for (int i = B - 1; i >= 0; --i) { for (int j = 0; j < mid; ++j) { se.insert(Y[i]); if ((int) se.size() == T) { break; } } } vector<bool> done(T); for (int i = 0; i < T; ++i) { auto it = se.upper_bound(toy[i].second); if (it != se.end()) { se.erase(it); done[i] = true; } } se.clear(); for (int i = A - 1; i >= 0; --i) { for (int j = 0; j < mid; ++j) { se.insert(X[i]); if ((int) se.size() == T) { break; } } } for (int i = 0; i < T; ++i) { auto it = se.upper_bound(toy[i].first); if (done[i]) continue; if (it != se.end()) { se.erase(it); done[i] = true; } } bool ok = true; for (int i = 0; i < T; ++i) { ok &= done[i]; } return ok; }; int l = 1, r = T + 1; while (l < r) { int mid = (l + r) >> 1; if (ch(mid)) { r = mid; } else { l = mid + 1; } } return (l == T + 1 ? -1 : l); }
#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...