Pagini recente » Cod sursa (job #2829565) | Cod sursa (job #2051538) | Cod sursa (job #1501367) | Cod sursa (job #1463526) | Cod sursa (job #1609615)
#include <cstdio>
#include <algorithm>
#define NMAX 100005
#define MMAX 2000000000
using namespace std;
int n,m,i,sol,timp,sum;
int cat[NMAX];
struct punct
{
int c,t;
}v[NMAX];
void cauta()
{
int st=1,dr=MMAX,mij,i;
while(st <= dr)
{
mij=(st+dr)/2;
int sum=0;
for(i=1;i<=n;++i)
{
if(2*v[i].t <= mij)
{
sum += (mij/(2*v[i].t))*v[i].c;
if(sum >= m) break;
}
else break;
}
if(sum >= m) {timp=mij;dr=mij-1;}
else {st=mij+1;}
}
}
bool cmp(punct p,punct r)
{
if(p.t < r.t) return 1;
else return 0;
}
void solve()
{
for(i=1;i<=n;++i)
cat[i]=(timp/(2*v[i].t))*v[i].c;
sort(cat+1,cat+n+1);
sol=0;sum=0;
for(i=1;i<=n;++i)
{
if(sum + cat[i] > m) break;
else
{
sum=sum+cat[i];
++sol;
}
}
}
int main()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d%d",&v[i].c,&v[i].t);
sort(v+1,v+n+1,cmp);
cauta();
solve();
printf("%d %d",timp,sol);
return 0;
}