Submission #925963

#TimeUsernameProblemLanguageResultExecution timeMemory
925963boris_mihovHiring (IOI09_hiring)C++17
60 / 100
343 ms24628 KiB
#include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> #include <queue> #include <set> typedef long long llong; const int MAXN = 500000 + 10; const int INF = 1e9; int n; llong s[MAXN]; llong q[MAXN]; int perm[MAXN]; std::priority_queue <std::pair <llong,int>> pq; llong sum; llong w; void solve() { std::iota(perm + 1, perm + 1 + n, 1); std::sort(perm + 1, perm + 1 + n, [&](int x, int y) { return s[x] * q[y] < s[y] * q[x]; }); int ans = 0; int cnt = 0; int maxPos = 0; for (int i = 1 ; i <= n ; ++i) { pq.push({q[perm[i]], perm[i]}); sum += q[perm[i]]; cnt++; while (sum * s[perm[i]] > w * q[perm[i]]) { cnt--; sum -= pq.top().first; pq.pop(); } if (cnt > ans) { maxPos = i; ans = cnt; } } while (pq.size()) { pq.pop(); } sum = 0; cnt = 0; std::cout << ans << '\n'; for (int i = 1 ; i <= maxPos ; ++i) { pq.push({q[perm[i]], perm[i]}); sum += q[perm[i]]; cnt++; while (sum * s[perm[i]] > w * q[perm[i]]) { cnt--; sum -= pq.top().first; pq.pop(); } } assert(pq.size() == ans); std::set <int> s; while (pq.size()) { std::cout << pq.top().second << '\n'; assert(!s.count(pq.top().second)); s.insert(pq.top().second); pq.pop(); } } void input() { std::cin >> n >> w; for (int i = 1 ; i <= n ; ++i) { std::cin >> s[i] >> q[i]; } } void fastIOI() { std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); return 0; }

Compilation message (stderr)

In file included from /usr/include/c++/10/cassert:44,
                 from hiring.cpp:4:
hiring.cpp: In function 'void solve()':
hiring.cpp:74:22: warning: comparison of integer expressions of different signedness: 'std::priority_queue<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   74 |     assert(pq.size() == ans);
      |            ~~~~~~~~~~^~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...