Submission #289998

#TimeUsernameProblemLanguageResultExecution timeMemory
289998Atill83Robots (IOI13_robots)C++14
28 / 100
361 ms11748 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];
int kul[MAXN];
bool check(int d){
    memset(done, 0, sizeof(done));
    memset(kul, 0, sizeof(kul));
    set<int> st;
    for(int i = 0; i < b; i++){
        st.insert(y[i]);
        kul[y[i]] += d;
    }

    for(int j = t - 1; j >= 0; j--){
        int cur = vc[j];
        auto u = st.upper_bound(s[cur]);
        if(u == st.end()){
            continue;
        }else{
            done[j] = 1;
            kul[*u]--;
            if(kul[*u] == 0){
                st.erase(u);
            }
        }
    }
    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...