제출 #366069

#제출 시각아이디문제언어결과실행 시간메모리
366069KoD로봇 (IOI13_robots)C++17
100 / 100
1008 ms24308 KiB
#ifndef __APPLE__ #include "robots.h" #endif #include <bits/stdc++.h> template <class T> using Vec = std::vector<T>; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { std::sort(X, X + A); std::sort(Y, Y + B); Vec<Vec<int>> memo(A + 1); for (int i = 0; i < T; ++i) { const auto x = std::upper_bound(X, X + A, W[i]) - X; const auto y = std::upper_bound(Y, Y + B, S[i]) - Y; if (x == A && y == B) { return -1; } memo[x].push_back(y); } int ok = T, ng = 0; while (ok - ng > 1) { const auto md = (ok + ng) / 2; std::priority_queue<int> que; for (int i = 0; i < A; ++i) { for (const auto y: memo[i]) { que.push(y); } for (int i = 0; i < md; ++i) { if (que.empty()) { break; } que.pop(); } } for (const auto y: memo[A]) { que.push(y); } Vec<int> count(B + 1); while (!que.empty()) { count[que.top()] += 1; que.pop(); } long long cur = 0; bool f = true; for (int i = B; i >= 0; i--) { cur += count[i]; if (cur > 0) { f = false; break; } cur -= md; } (f ? ok : ng) = md; } return ok; } #ifdef __APPLE__ int X[100]; int Y[100]; int W[100]; int S[100]; int main() { int A, B, T; std::cin >> A >> B >> T; for (int i = 0; i < A; ++i) { std::cin >> X[i]; } for (int i = 0; i < B; ++i) { std::cin >> Y[i]; } for (int i = 0; i < T; ++i) { std::cin >> W[i] >> S[i]; } std::cout << putaway(A, B, T, X, Y, W, S) << '\n'; } #endif
#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...