Pagini recente » Cod sursa (job #2580871) | Cod sursa (job #1503661) | Cod sursa (job #3215348) | Cod sursa (job #612215) | Cod sursa (job #328221)
Cod sursa(job #328221)
#include<algorithm>
using namespace std;
#define DIM 100005
#define INF DIM*DIM
struct garaj
{
int c,t;
};
garaj a[DIM];
int n,m,dr,tmin;
void read ()
{
int i,nr;
dr=INF;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d%d",&a[i].c,&a[i].t);
a[i].t*=2;
if(m%a[i].c!=0)
nr=(m/a[i].c+1)*a[i].t;
else
nr=(m/a[i].c)*a[i].t;
if(nr<dr)
dr=nr;
}
}
int check (int sol)
{
long long sum=0;
int i;
for(i=1;i<=n;++i)
{
sum+=(sol/a[i].t)*a[i].c;
if(sum>=m)
return 0;
}
return 1;
}
int cmp (garaj a,garaj b)
{
return a.c*(tmin/a.t)>b.c*(tmin/b.t);
}
void show ()
{
int nrmin,i;
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;++i)
{
m-=(tmin/a[i].t)*a[i].c;
if(m<=0)
{
nrmin=i;break;
}
}
printf("%d %d",tmin,nrmin);
}
void solve ()
{
int st=1,mij,nr;
tmin=dr;
while(st<=dr)
{
mij=(st+dr)/2;
nr=check(mij);
if(nr==0)
{
dr=mij-1;
tmin=mij;
}
else
st=mij+1;
}
show ();
}
int main ()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
read ();
solve ();
return 0;
}