Submission #289987

#TimeUsernameProblemLanguageResultExecution timeMemory
289987Atill83Robots (IOI13_robots)C++14
90 / 100
3077 ms9956 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; #define ff first #define ss second typedef pair<int, int> pii; int a, b, *x, *y, *w, *s, t; vector<int> vc; const int MAXN = (int) 1e6 + 5; const int MAXM = (int) 5e4 + 5; bool done[MAXN]; bool check(int d){ memset(done, 0, sizeof(done)); multiset<pii> st; for(int i = 0; i < b; i++){ st.insert({y[i], d}); } for(int j = t - 1; j >= 0; j--){ int cur = vc[j]; auto u = st.lower_bound({s[cur], (int)1e7}); if(u == st.end()){ continue; }else{ done[j] = 1; pii sim = *u; st.erase(u); sim.ss--; if(sim.ss){ st.insert(sim); } } } int pt2 = a - 1, used = d; for(int j = t - 1; j >= 0; j--){ if(done[j]) continue; int cur = vc[j]; if(pt2 == -1 || x[pt2] <= w[cur]) return 0; used--; if(used == 0){ pt2--; used = d; } } return 1; } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { a = A; b = B; x = X; y = Y; w = W; s = S; t = T; sort(X, X + A); sort(Y, Y + B); for(int i = 0; i < T; i++) vc.push_back(i); sort(vc.begin(), vc.end(), [W](int a, int b){ return W[a] < W[b]; }); for(int j = vc.size() - 1; j >= 0; j--){ if(W[vc[j]] < X[A - 1]) break; if(S[vc[j]] >= Y[B - 1]) return -1; } int l = 1, r = T; while(l < r){ int m = (l + r) / 2; if(check(m)){ r = m; }else{ l = m + 1; } } return 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...