Submission #1006639

#TimeUsernameProblemLanguageResultExecution timeMemory
1006639huutuanHiring (IOI09_hiring)C++14
29 / 100
250 ms23964 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(){
   // auto start=clock();
   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];
   });
   int ans=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>mq[i]){
            sum-=pq.top();
            pq.pop();
         }
         ans=max(ans, (int)pq.size());
      }
   }
   int l=max(1ll, w-1000), r=w;
   // while (l<=r){
   //    int mid=(l+r)/2;
   //    for (int i=1; i<=n; ++i){
   //       mq[i]=mid*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];
   //    });
   //    int cur=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>mq[i]){
   //             sum-=pq.top();
   //             pq.pop();
   //          }
   //          cur=max(cur, (int)pq.size());
   //       }
   //    }
   //    if (cur==ans) r=mid-1;
   //    else l=mid+1;
   // }
   for (int i=1; i<=n; ++i){
      mq[i]=l*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];
   });
   {
      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>mq[i]){
            sum-=pq.top().first;
            pq.pop();
         }
         if ((int)pq.size()==ans){
            cout << ans << '\n';
            while (pq.size()){
               cout << pq.top().second << '\n';
               pq.pop();
            }
            return 0;
         }
      }
   }
   return 0;
}

Compilation message (stderr)

hiring.cpp: In function 'int32_t main()':
hiring.cpp:36:28: warning: unused variable 'r' [-Wunused-variable]
   36 |    int l=max(1ll, w-1000), r=w;
      |                            ^
#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...