Pagini recente » Cod sursa (job #2566729) | Cod sursa (job #1899362) | Cod sursa (job #1566553) | Cod sursa (job #2307281) | Cod sursa (job #1005913)
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 100010;
int N, M, C[NMAX], T[NMAX], V[NMAX];
bool Check(int MaxTime)
{
int Total = 0;
for(int i = 1; i <= N; ++ i)
{
Total += C[i] * (MaxTime / (2 * T[i]));
if(Total >= M)
return 1;
}
return 0;
}
void Search()
{
int Left = 0, Right = 100000000, Mid, Ans, Time;
while(Left <= Right)
{
Mid = (Left + Right) / 2;
if(Check(Mid)) Ans = Mid, Right = Mid - 1;
else Left = Mid + 1;
}
for(int i = 1; i <= N; ++ i)
V[i] = C[i] * (Ans / (2 * T[i]));
sort(V + 1, V + N + 1);
int Total = 0;
for(int i = N; i >= 1; -- i)
{
Total += V[i];
if(Total >= M)
{
Time = i;
break;
}
}
printf("%i %i\n", Ans, Time);
}
int main()
{
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
scanf("%i %i", &N, &M);
for(int i = 1; i <= N; ++ i)
scanf("%i %i", &C[i], &T[i]);
Search();
return 0;
}