Submission #918428

#TimeUsernameProblemLanguageResultExecution timeMemory
918428MackerRobots (IOI13_robots)C++14
0 / 100
6 ms8796 KiB
#include "robots.h"
#include <bits/stdc++.h>

 
using namespace std;
typedef long long ll;
#define all(v) v.begin(), v.end()

vector<int> used;
vector<pair<int, int>> toys;
multimap<int, int> wi, si;
vector<int> x, y;

bool can(int t){
    multimap<int, int> sicur;
    used.assign(toys.size(), false);
    int j = 0;
    int cnt = 0;
    bool done = 0;
    for (auto &i : wi) {
        if(done) break;
        if(i.first < x[j]){
            sicur.insert({toys[i.second].second, i.second});
        }
        else{
            while(i.first >= x[j]){
                cnt = 0;
                while(cnt < t && sicur.size()){
                    int k = (*--sicur.end()).second;
                    used[k] = true;
                    sicur.erase(--sicur.end());
                    cnt++;
                }
                j++;
                if(j >= x.size()) {done = 1; break;}
            }
            sicur.insert({toys[i.second].second, i.second});
        }
    }
    for (int i = j; i < x.size(); i++) {
        cnt = 0;
        while(cnt < t && sicur.size()){
            int k = (*--sicur.end()).second;
            used[k] = true;
            sicur.erase(--sicur.end());
            cnt++;
        }
    }
    
    vector<int> ss;
    for (int i = 0; i < toys.size(); i++) {
        if(!used[i]) ss.push_back(toys[i].second);
    }
    sort(all(ss), greater<int>());
    j = 0;
    for (int i = y.size() - 1; i >= 0; i--) {
        cnt = 0;
        while(cnt < t){
            if(ss[j] < y[i]) {
                j++;
                if(j >= ss.size()) return 1;
                cnt++;
            }
            else return 0;
        }
    }
    return 0;
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    for (int i = 0; i < T; i++) {
        toys.push_back({W[i], S[i]});
        wi.insert({W[i], i});
        si.insert({S[i], i});
    }
    used.resize(T);
    for (int i = 0; i < A; i++) x.push_back(X[i]);
    for (int i = 0; i < B; i++) y.push_back(Y[i]);
    sort(all(x));
    sort(all(y));
    
    int l = 0, r = T + 1, mid;
    while(l < r){
        mid = (l + r) / 2;
        if(can(mid)) r = mid;
        else l = mid + 1;
    }
    if(r == T + 1) return -1;
    return r;
}

Compilation message (stderr)

robots.cpp: In function 'bool can(int)':
robots.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |                 if(j >= x.size()) {done = 1; break;}
      |                    ~~^~~~~~~~~~~
robots.cpp:40:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     for (int i = j; i < x.size(); i++) {
      |                     ~~^~~~~~~~~~
robots.cpp:51:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |     for (int i = 0; i < toys.size(); i++) {
      |                     ~~^~~~~~~~~~~~~
robots.cpp:61:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |                 if(j >= ss.size()) return 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...