Pagini recente » Cod sursa (job #2421477) | Cod sursa (job #2126462) | Cod sursa (job #752596) | Cod sursa (job #1452088) | Cod sursa (job #1490594)
#include <fstream>
#include <cstring>
#include <algorithm>
#include <string>
#define ll int
#define maxN 100002
using namespace std;
int n, sol, x;
ll m;
struct elem
{
ll c;
ll t;
} v[maxN];
string buffer;
string::iterator buffer_it;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
int cmp(const elem a, const elem b)
{
return a.c * ((x ) / a.t) > b.c * ((x) / b.t);
}
void r (ll &x )
{
for (; *buffer_it > '9' || *buffer_it < '0'; ++ buffer_it ) ;
for ( x = 0; *buffer_it <= '9' && *buffer_it >= '0'; ++ buffer_it )
{
x= x * 10 + *buffer_it - '0';
}
}
void read()
{
int i;
getline( fin, buffer, (char)0 ) ;
buffer_it = buffer.begin();
r(n);
r(m);
for (i = 1; i <= n; ++ i)
r(v[i].c), r(v[i].t),
v[i].t *= 2;
}
bool ok(ll x)
{
int i;
ll sum = 0LL;
for (i = 1; i <= n; ++ i)
{
sum += v[i].c * (x / v[i].t);
if (sum >= m)
break;
}
return sum >= m;
}
void write()
{
int sum = 0, i, p;
x = 0;
for(p = 1 << 29; p; p >>= 1)
if(!ok(x + p))
x += p;
++ x;
fout << x << " ";
sort(v + 1, v + n + 1, cmp);
for (i = 1; i <= n; ++ i)
{
sum += v[i].c * (x / v[i].t);
++ sol;
if (sum >= m)
break;
}
fout << sol;
}
int main()
{
read();
write();
return 0;
}