Submission #1006544

#TimeUsernameProblemLanguageResultExecution timeMemory
1006544huutuanHiring (IOI09_hiring)C++14
71 / 100
251 ms26360 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int N=5e5+10;
int n, w, s[N], q[N], mq[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];
      mq[i]=w*q[i]/s[i];
   }
   iota(id, id+n+1, 0);
   sort(id+1, id+n+1, [&](int x, int y){
      return mq[x]>mq[y];
   });
   pair<int, double> ans={0, 0};
   {
      priority_queue<pair<int, int>> pq; int sum=0; double ss=0;
      for (int _i=1; _i<=n; ++_i){
         int i=id[_i];
         pq.emplace(q[i], i); sum+=q[i]; ss+=(double)s[i]/(double)q[i];
         while (sum>mq[i]){
            sum-=pq.top().first;
            ss-=(double)s[pq.top().second]/(double)q[pq.top().second];
            pq.pop();
         }
         ans=max(ans, {(int)pq.size(), -ss*sum});
      }
   }
   {
      priority_queue<pair<int, int>> pq; int sum=0; double ss=0;
      for (int _i=1; _i<=n; ++_i){
         int i=id[_i];
         pq.emplace(q[i], i); sum+=q[i]; ss+=(double)s[i]/(double)q[i];
         while (sum>mq[i]){
            sum-=pq.top().first;
            ss-=(double)s[pq.top().second]/(double)q[pq.top().second];
            pq.pop();
         }
         if ((int)pq.size()==ans.first && abs(-ss*sum-ans.second)<1e-6){
            cout << ans.first << '\n';
            vector<int> v;
            while (pq.size()){
               v.push_back(pq.top().second);
               pq.pop();
            }
            sort(v.begin(), v.end());
            for (int j:v) cout << j << '\n';
            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...