Submission #1355786

#TimeUsernameProblemLanguageResultExecution timeMemory
1355786AMel0nRobots (IOI13_robots)C++20
28 / 100
825 ms53428 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[], vector<int> &ord, multiset<int, greater<>> sett) {
    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++;
            sett.erase(sett.find(WT[toy]));
        }
    }
    j = 0, cnt = 0;
    for(int w: sett) {
        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 WR[], int SR[], int WT[], int ST[]) {
    sort(WR, WR + A, greater<>()), sort(SR, SR + B, greater<>());
    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];});
    multiset<int, greater<>> sett; 
    for(int i = 0; i < T; i++) sett.insert(WT[i]);
    int l = 1, r = T+1;
    while(l < r) {
        int m = (l + r) / 2;
        if (solve(m, A, B, T, WR, SR, WT, ST, ord, sett)) 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...