Pagini recente » Cod sursa (job #2133121) | Cod sursa (job #1861446) | Cod sursa (job #2204576) | Cod sursa (job #104360) | Cod sursa (job #328210)
Cod sursa(job #328210)
#include<algorithm>
using namespace std;
#define DIM 100005
#define INF DIM*DIM
struct garaj
{
int c,t;
};
garaj a[DIM];
int n,m,dr;
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;
}
void show (int tmin)
{
int nrmin,nr[DIM],i;
for(i=1;i<=n;++i)
nr[i]=(tmin/a[i].t)*a[i].c;
sort(nr+1,nr+n+1);
for(i=n;i>0;--i)
{
m-=nr[i];
if(m<=0)
{
nrmin=n-i+1;break;
}
}
printf("%d %d",tmin,nrmin);
}
void solve ()
{
int st=1,mij,nr,sol=dr;
while(st<=dr)
{
mij=(st+dr)/2;
nr=check(mij);
if(nr==0)
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
}
show (sol);
}
int main ()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
read ();
solve ();
return 0;
}