Pagini recente » Cod sursa (job #994654) | Cod sursa (job #1717474) | Cod sursa (job #2502736) | Cod sursa (job #734105) | Cod sursa (job #1490627)
#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 w[maxN];
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 = 0;
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 << " ";
for (i = 1; i <= n; ++ i)
w[i]=v[i].c * (x / v[i].t);
sort(w + 1, w + n + 1);
for (i = n; i >= 1 && sum < m; -- i)
{
++ sol;
sum += w[i];
}
fout << sol;
}
int main()
{
read();
write();
return 0;
}