Pagini recente » Cod sursa (job #1433154) | Cod sursa (job #1646014) | Cod sursa (job #2914161) | Cod sursa (job #777091) | Cod sursa (job #1575663)
#include <cstdio>
#include <algorithm>
#define INF 2000000000000LL
#define lint long long
using namespace std;
lint n, m, timp, timpst, timpdr, i, T[100010], C[100010];
lint numar(lint timp) {
// se da timp si sa aflu numarul maxim de sticle de transportat in timp
lint nr = 0;
for (i=1;i<=n;i++) {
nr = nr + timp/T[i]*C[i];
}
return nr;
}
int main () {
// ifstream fin ("garaj.in");
// ofstream fout("garaj.out");
FILE *fin = fopen("garaj.in", "r");
FILE *fout = fopen("garaj.out", "w");
//fin>>n>>m;
fscanf(fin,"%lld%lld",&n,&m);
for (i=1;i<=n;i++) {
fscanf(fin,"%lld%lld",&C[i],&T[i]);
//fin>>C[i]>>T[i];
T[i] *= 2;
}
timpst = 1;
timpdr = INF;
while (timpst <= timpdr) {
timp = (timpst + timpdr)/2;
if (numar(timp) < m)
timpst = timp + 1;
else
timpdr = timp - 1;
}
// cu acest timp minim gasit sa alegem un numar minim de camioane
for (i=1;i<=n;i++)
T[i] = timpst/T[i]*C[i];
sort(T+1, T+n+1);
i = n;
while (m>=0) {
m -= T[i];
if (m <= 0)
break;
i--;
}
// fout<<timpst<<" ";
// fout<<n-i+1;
fprintf(fout, "%lld %lld",timpst, n-i+1);
return 0;
}