Pagini recente » Cod sursa (job #2228913) | Cod sursa (job #1617942) | Cod sursa (job #958132) | Cod sursa (job #2217165) | Cod sursa (job #559285)
Cod sursa(job #559285)
#include <cstdio>
#include <cassert>
#include <algorithm>
#define Nmax 100005
#define InFile "garaj.in"
#define OutFile "garaj.out"
using namespace std;
int n, m, Sl, tmp, St[Nmax];
struct {int c, t;} T[Nmax];
void read();
void solve();
inline bool cmp (int a, int b) {return a>b;}
int verif (int);
int binara (int, int);
void write();
int main()
{
assert (freopen (InFile, "r", stdin));
assert (freopen (OutFile, "w", stdout));
read();
solve();
write();
return 0;
}
void read()
{
int i;
scanf ("%d %d\n", &n, &m);
for (i=1; i<=n; i++)
scanf ("%d %d\n", &T[i].c, &T[i].t), T[i].t*=2;
}
void solve()
{
int i;
long long sum;
tmp=binara (1, (int)1e9);
for (i=1; i<=n; i++)
St[i]=tmp/T[i].t*T[i].c;
sort (St+1, St+n+1, cmp);
Sl=0;
sum=0;
for (i=1; i<=n && sum<m; i++)
{
sum+=St[i];
Sl++;
}
}
int binara (int st, int dr)
{
int mij, p=dr;
while (st<=dr)
{
mij=st+(dr-st)/2;
if (verif (mij))
{
p=mij;
dr=mij-1;
}
else
st=mij+1;
}
return p;
}
void write()
{
printf ("%d %d\n", tmp, Sl);
}
int verif (int x)
{
int i;
long long sum=0;
for (i=1; i<=n && sum<m; i++)
sum+=x/T[i].t*T[i].c;
if (sum>=m)
return 1;
return 0;
}