제출 #918437

#제출 시각아이디문제언어결과실행 시간메모리
918437Macker로봇 (IOI13_robots)C++14
76 / 100
885 ms65536 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 cnt = 0, j = 0;
    for (auto &i : wi) {
        while(j < x.size() && 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++;
        }
        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);
    }
    if(ss.empty()) return 1;
    
    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;
}

컴파일 시 표준 에러 (stderr) 메시지

robots.cpp: In function 'bool can(int)':
robots.cpp:20:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |         while(j < x.size() && i.first >= x[j]){
      |               ~~^~~~~~~~~~
robots.cpp:33:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |     for (int i = j; i < x.size(); i++) {
      |                     ~~^~~~~~~~~~
robots.cpp:44: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]
   44 |     for (int i = 0; i < toys.size(); i++) {
      |                     ~~^~~~~~~~~~~~~
robots.cpp:56:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |                 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...