Pagini recente » Cod sursa (job #876142) | Cod sursa (job #2359495) | Cod sursa (job #2750024) | Cod sursa (job #1878738) | Cod sursa (job #1601006)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 100008;
int N,M,timp,cnt,s[nmax];
struct el{
int t,nr;
}a[nmax];
inline bool cmp(const el &A, const el &B){
return A.t < B.t;
}
inline bool Ok(int T){
int i,j,c=0,p,h = T,k = M;
for(i = 1; i <= N && k > 0; ++i){
j = 2 * a[i].t;
p = h / j;
k=k-(a[i].nr)*p;
}
if(k<=0){
for(i = 1; i <= N; ++i)
s[i] = (T/(a[i].t*2))*a[i].nr;
sort(s+1,s+N+1);
i = N; h = M;
while(h>0)h-=s[i],++c;
cnt = c;
return true;
}
return false;
}
inline void Calc(){
int st,dr,mij;
st = 1; dr = 1999999999;
while(st <= dr){
mij = (st + dr)/2;
if(Ok(mij)){
timp = mij;
dr = mij-1;
}
else st = mij+1;
}
}
int main(){
int i;
freopen ("garaj.in","r",stdin);
freopen ("garaj.out","w",stdout);
scanf("%d %d\n",&N,&M);
for(i = 1; i <= N; ++i)
scanf("%d %d\n",&a[i].nr,&a[i].t);
sort(a+1,a+N+1,cmp);
Calc();
printf("%d %d\n",timp,cnt);
return 0;
}