Pagini recente » Cod sursa (job #2815150) | Cod sursa (job #2068405) | Cod sursa (job #1333089) | Cod sursa (job #1304467) | Cod sursa (job #1575643)
#include <fstream>
#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");
fin>>n>>m;
for (i=1;i<=n;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;
}
fout<<timpst<<" ";
// 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<<n-i+1;
return 0;
}