Pagini recente » Cod sursa (job #32950) | Cod sursa (job #1935084) | Cod sursa (job #2041164) | Cod sursa (job #2882760) | Cod sursa (job #982593)
Cod sursa(job #982593)
#include<stdio.h>
#include<algorithm>
#define NMAX 100007
#define x first
#define y second
using namespace std;
pair < int, int > a[NMAX];
int n, Sum, Nr[NMAX], Ans;
inline bool ok(int med){
int s = 0;
for(int i = 1; i <= n; ++ i){
if(med > a[i].y * 2)
s += (med / (a[i].y * 2)) * a[i].x;
if(s >= Sum)
return 1;
}
return 0;
}
inline int Caut(int st, int dr){
int med = 0, last = - 1;
while(st <= dr){
med = (st + dr) >> 1;
if(ok(med) == 1){
last = med;
dr = med - 1;
}
else
st = med + 1;
}
return last;
}
int main(){
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
scanf("%d %d", &n, &Sum);
for(int i = 1; i <= n; ++ i)
scanf("%d %d", &a[i].x, &a[i].y);
int T = Caut(1, 10000000000);
printf("%d ", T);
for(int i = 1; i <= n; ++ i)
Nr[i] = T / (a[i].y * 2) * a[i].x;
sort(Nr + 1, Nr + n + 1);
reverse(Nr + 1, Nr + n + 1);
while(Sum > 0){
++ Ans;
Sum -= Nr[Ans];
}
printf("%d", Ans);
}