제출 #405578

#제출 시각아이디문제언어결과실행 시간메모리
405578JasiekstrzHiring (IOI09_hiring)C++17
100 / 100
544 ms32792 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; } }; bool comp1(Worker a,Worker b) { return (a.q>b.q); } Worker tab[N+10]; Worker tq[N+10]; int gg[N+10]; bool us[N+10]; Worker solve(int n,long long w,int mid,Worker brk) { for(int i=1;i<=n;i++) us[i]=false; Worker mn={w+1,1}; long long sum=0; int cnt=0; int bb=1; for(int i=1;i<=n;i++) { if(cnt==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[gg[tab[i].id]]=true;; return mn; } if(cnt>=mid-1 && mid>1) { while(!us[bb]) bb++; } if(cnt<mid-1) { sum+=tab[i].q; cnt++; us[gg[tab[i].id]]=true; } else if(mid>1 && tab[i].q<tq[bb].q) { sum+=tab[i].q-tq[bb].q; us[bb]=false; us[gg[tab[i].id]]=true; } } 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; tq[i]=tab[i]; } sort(tab+1,tab+n+1); sort(tq+1,tq+n+1,comp1); for(int i=1;i<=n;i++) gg[tq[i].id]=i; 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))); for(int i=1;i<=n;i++) { if(us[i]) cout<<tq[i].id<<"\n"; } 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...