제출 #1006644

#제출 시각아이디문제언어결과실행 시간메모리
1006644huutuanHiring (IOI09_hiring)C++14
4 / 100
237 ms20124 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N=5e5+10; int n, w, s[N], q[N], id[N]; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> w; for (int i=1; i<=n; ++i){ cin >> s[i] >> q[i]; } iota(id, id+n+1, 0); sort(id+1, id+n+1, [&](int x, int y){ return s[x]*q[y]<s[y]*q[x]; }); pair<int, pair<double, int>> ans={0, {0, 0}}; { priority_queue<int> pq; int sum=0; for (int _i=1; _i<=n; ++_i){ int i=id[_i]; pq.push(q[i]); sum+=q[i]; while (sum>w*q[i]/s[i]){ sum-=pq.top(); pq.pop(); } ans=max(ans, {(int)pq.size(), {-sum*s[i]/q[i], i}}); } } cout << ans.first << '\n'; w=w*q[ans.second.second]/s[ans.second.second]; { priority_queue<pair<int, int>> pq; int sum=0; for (int _i=1; _i<=n; ++_i){ int i=id[_i]; pq.emplace(q[i], i); sum+=q[i]; while (sum>w*q[i]/s[i]){ sum-=pq.top().first; pq.pop(); } if (ans.first==(int)pq.size() && ans.second.second==i){ while (pq.size()){ cout << pq.top().second << '\n'; pq.pop(); } return 0; } } } return 0; }
#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...