Pagini recente » Cod sursa (job #2927413) | Cod sursa (job #982504) | Cod sursa (job #1339051) | Cod sursa (job #2286422) | Cod sursa (job #1399093)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("garaj.in");
ofstream out ("garaj.out");
const int MAXN = 100000 + 10;
int N, M;
struct truck
{
int Cap;
int T;
} V[MAXN];
int Val[MAXN];
bool ok (int time)
{
int ret = 0;
int i;
for (i = 1; i <= N; i ++){
ret += (time / V[i].T) * V[i].Cap;
if (ret >= M)
return 1;
}
return 0;
}
int bsearch ()
{
int MAX = 200000000;
int step;
int ret = MAX;
for (step = 1; step < MAX; step *= 2);
for ( ; step; step /= 2){
if (ret - step >= 1 && ok (ret - step))
ret -= step;
}
return ret;
}
int T;
int main()
{
int i;
in >> N >> M;
for (i = 1; i <= N; i ++){
in >> V[i].Cap >> V[i].T;
V[i].T *= 2;
}
T = bsearch ();
for (i = 1; i <= N; i ++)
Val[i] = V[i].Cap * (T / V[i].T);
sort (Val + 1, Val + N + 1);
int Sum = 0;
int Ans = 0;
for (i = N; i; i --){
Sum += Val[i];
Ans ++;
if (Sum >= M)
break;
}
out << T << " " << Ans;
return 0;
}