제출 #405434

#제출 시각아이디문제언어결과실행 시간메모리
405434JasiekstrzHiring (IOI09_hiring)C++17
84 / 100
1589 ms14644 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=5e5; struct Worker { long long s,q; int id; Worker(long long _s=0,long long _q=1,int _id=0) : s(_s), q(_q), id(_id) {}; bool operator<(const Worker &oth) const { return s*oth.q<oth.s*q; } bool operator<=(const Worker &oth) const { return s*oth.q<=oth.s*q; } }; Worker tab[N+10]; priority_queue<pair<int,int>> us; Worker solve(int n,long long w,int mid,Worker brk) { while(!us.empty()) us.pop(); Worker mn={w+1,1}; long long sum=0; for(int i=1;i<=n;i++) { if(us.size()==mid-1) mn=min(mn,Worker((sum+tab[i].q)*tab[i].s,tab[i].q)); if(mn.s*brk.q==mn.q*brk.s) { us.push({tab[i].q,tab[i].id}); return mn; } if(us.size()<mid-1) { sum+=tab[i].q; us.push({tab[i].q,tab[i].id}); } else if(mid>1 && tab[i].q<us.top().fi) { sum+=tab[i].q-us.top().fi; us.pop(); us.push({tab[i].q,tab[i].id}); } } return mn; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; long long w; cin>>n>>w; for(int i=1;i<=n;i++) { cin>>tab[i].s>>tab[i].q; tab[i].id=i; } sort(tab+1,tab+n+1); int bg=0,en=n; while(bg<en) { int mid=(bg+en+1)/2; if(solve(n,w,mid,Worker(-1,1))<=Worker(w,1)) bg=mid; else en=mid-1; } cout<<bg<<"\n"; solve(n,w,bg,solve(n,w,bg,Worker(-1,1))); while(!us.empty()) { cout<<us.top().se<<"\n"; us.pop(); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

hiring.cpp: In function 'Worker solve(int, long long int, int, Worker)':
hiring.cpp:30:15: warning: comparison of integer expressions of different signedness: 'std::priority_queue<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   30 |   if(us.size()==mid-1)
      |      ~~~~~~~~~^~~~~~~
hiring.cpp:37:15: warning: comparison of integer expressions of different signedness: 'std::priority_queue<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   37 |   if(us.size()<mid-1)
      |      ~~~~~~~~~^~~~~~
#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...