Submission #918447

#TimeUsernameProblemLanguageResultExecution timeMemory
918447MackerRobots (IOI13_robots)C++14
76 / 100
907 ms65536 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; #define all(v) v.begin(), v.end() bool used[1000005]; pair<int, int> toys[1000005]; int tt; multimap<int, int> wi, si; vector<int> x, y; bool can(int t){ multimap<int, int> sicur; memset(used, 0, 1000005); 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 < tt; 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[]) { tt = T; for (int i = 0; i < T; i++) { toys[i] = {W[i], S[i]}; wi.insert({W[i], i}); si.insert({S[i], i}); } 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: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: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...