Submission #1355780

#TimeUsernameProblemLanguageResultExecution timeMemory
1355780AMel0n로봇 (IOI13_robots)C++20
14 / 100
3097 ms29808 KiB
#include "robots.h"
#include <bits/stdc++.h>
using namespace std;

bool solve(int k, int A, int B, int T, int WR[], int SR[], int WT[], int ST[]) {
    multiset<int, greater<>> st; 
    for(int i = 0; i < T; i++) st.insert(WT[i]);
    vector<int> ord(T); iota(ord.begin(), ord.end(), 0);
    sort(ord.begin(), ord.end(), [&](const int a, const int b) {return WT[a] > WT[b];});
    int j = 0, cnt = 0;
    for(int i = 0; i < T; i++) {
        int toy = ord[i];
        if (cnt >= k) j++, cnt = 0;
        if (j >= B) break;
        if (ST[toy] < SR[j]) {
            cnt++;
            st.erase(st.find(WT[toy]));
        }
    }
    j = 0, cnt = 0;
    for(int w: st) {
        if (cnt >= k) j++, cnt = 0;
        if (j >= A) return 0;
        if (w < WR[j]) {
            cnt++;
        } else {
            return 0;
        }
    }
    return 1;
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    sort(X, X + A, greater<>()), sort(Y, Y + B, greater<>());
    int l = 1, r = T+1;
    while(l < r) {
        int m = (l + r) / 2;
        if (solve(m, A, B, T, X, Y, W, S)) r = m;
        else l = m + 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...