제출 #104860

#제출 시각아이디문제언어결과실행 시간메모리
104860popovicirobert로봇 (IOI13_robots)C++14
100 / 100
1719 ms16824 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; struct Comp { int val, pos; bool operator <(const Comp &other) const { return val < other.val; } }; vector <int> ordw, ords; vector <bool> vis; inline bool check(int res, int A, int B, int T, int X[], int Y[], int W[], int S[]) { fill(vis.begin(), vis.end(), 0); priority_queue <Comp> pq; int pos = 0, ans = 0; for(int i = 0; i < A; i++) { while(pos < T && W[ordw[pos]] < X[i]) { pq.push({S[ordw[pos]], ordw[pos]}); pos++; } for(int j = 1; j <= res && pq.size(); j++) { auto it = pq.top(); pq.pop(); vis[it.pos] = 1; ans++; } } pos = 0; int cnt = 0; for(int i = 0; i < B; i++) { while(pos < T && S[ords[pos]] < Y[i]) { if(vis[ords[pos]] == 0) { cnt++; } pos++; } for(int j = 1; j <= res && cnt > 0; j++) { ans++; cnt--; } } return ans == T; } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X + A), sort(Y, Y + B); ordw.resize(T), ords.resize(T), vis.resize(T); iota(ordw.begin(), ordw.end(), 0), iota(ords.begin(), ords.end(), 0); sort(ordw.begin(), ordw.end(), [&](const int &a, const int &b) {return W[a] < W[b];}); sort(ords.begin(), ords.end(), [&](const int &a, const int &b) {return S[a] < S[b];}); for(int i = 0; i < T; i++) { if(W[i] >= X[A - 1] && S[i] >= Y[B - 1]) { return -1; } } int res = 0, step = 1; while(!check(res + step, A, B, T, X, Y, W, S)) { res += step; step <<= 1; } step >>= 1; while(step) { if(!check(res + step, A, B, T, X, Y, W, S)) { res += step; } step >>= 1; } return res + 1; }
#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...