Submission #982892

#TimeUsernameProblemLanguageResultExecution timeMemory
982892hyakupRobots (IOI13_robots)C++17
100 / 100
2971 ms26448 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; #define ll long long const int inf = 2e9 + 10; const int maxn = 5e4 + 10; const int maxt = 1e6 + 10; int wbots[maxn], sbots[maxn]; struct Toy{ int w, s; Toy( int w = 0, int s = 0 ): w(w), s(s) {} bool operator < ( Toy t ){ return (( s == t.s ) ? w > t.w : s > t.s ); } } toys[maxt]; bool check( int A, int B, int T, int k ){ multiset<pair<int, int>> s; for( int i = 0; i < A; i++ ) s.insert({ wbots[i] - 1, k }); ll cont = 0, i = 0; for( int t = 0; t < T; t++ ){ Toy cur = toys[t]; for( i; i < B && sbots[i] > cur.s; i++ ) cont += k; auto it = s.lower_bound({ cur.w, 0 }); if( it == s.end() ){ if( cont ){ cont--; continue; } return false; } auto [val, qtd] = *it; s.erase(it); if( qtd > 1 ) s.insert({ val, qtd - 1 }); } return true; } int bs( int A, int B, int T ){ int l = (T + A + B - 1)/( A + B ), r = T + 1; while( l < r ){ int mid = ( l + r )/2; if( check( A, B, T, mid ) ) r = mid; else l = mid + 1; } return ( r == T + 1 ) ? -1 : r; } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { for( int i = 0; i < A; i++ ) wbots[i] = X[i]; for( int i = 0; i < B; i++ ) sbots[i] = Y[i]; for( int i = 0; i < T; i++ ) toys[i] = Toy( W[i], S[i] ); sort( wbots, wbots + A ); sort( sbots, sbots + B, greater<int>() ); sort( toys, toys + T ); return bs( A, B, T ); }

Compilation message (stderr)

robots.cpp: In function 'bool check(int, int, int, int)':
robots.cpp:22:10: warning: statement has no effect [-Wunused-value]
   22 |     for( i; i < B && sbots[i] > cur.s; i++ ) cont += k;
      |          ^
#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...