Pagini recente » Cod sursa (job #2142114) | Cod sursa (job #2903346) | Fotbal3 | Cod sursa (job #1963698) | Cod sursa (job #1399086)
#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];
bool ok (int time)
{
int ret = 0;
int i;
for (i = 1; i <= N; i ++)
ret += (time / V[i].T) * V[i].Cap;
return (ret >= M);
}
int bsearch ()
{
int MAX = 10000000;
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;
struct comp
{
inline bool operator () (const truck &A, const truck &B) const
{
return A.Cap * (T / A.T) > B.Cap * (T / B.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 ();
out << T << " ";
sort (V + 1, V + N + 1, comp ());
int Sum = 0;
int Ans = 0;
for (i = 1; i <= N; i ++){
Sum += V[i].Cap * (T / V[i].T);
Ans ++;
if (Sum >= M)
break;
}
out << Ans;
return 0;
}