Pagini recente » Cod sursa (job #2031271) | Cod sursa (job #1640391) | Cod sursa (job #411835) | Cod sursa (job #1365981) | Cod sursa (job #596366)
Cod sursa(job #596366)
#include <cstdio>
#include <functional>
#include <algorithm>
using namespace std;
#define MAXN 100010
#define HIGH (1<<25)
inline int check(int N, int M, int t, int *C, int *D){
int i, sum=0;
for(i=1; i<=N; i++){
sum+=(t/D[i])*C[i];
if(sum >= M)
return 1;
}
return 0;
}
int main(){
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
int N, M, i, l, r, mid, time, sum;
static int C[MAXN], D[MAXN], A[MAXN];
scanf("%d%d", &N, &M);
for(i=1; i<=N; i++)
scanf("%d%d", C+i, D+i);
for(i=1; i<=N; i++)
D[i]=D[i]<<1;
l=1; r=HIGH;
while(l<=r){
mid=((r-l)>>1)+l;
if(check(N, M, mid, C, D))
r=mid-1;
else
l=mid+1;
}
time=l;
for(i=1; i<=N; i++)
A[i]=time/D[i]*C[i];
sort(A+1, A+N+1, greater<int>());
sum=0;
for(i=1; i<=N; i++){
sum+=A[i];
if(sum>=M)
break;
}
printf("%d %d\n", time, i);
return 0;
}