Pagini recente » Cod sursa (job #2618829) | Cod sursa (job #359366) | Statistici Borsay Zsuzsa (duduci1) | Rating Munte Alexandru (feueralexmunte) | Cod sursa (job #322541)
Cod sursa(job #322541)
#include <stdio.h>
#include <stdlib.h>
#define N 100005
int n,m,tmin,nrmin,r;
struct camion
{
int a,b;//a= capacitate; b=timp pt un transport
};
camion v[N];
void read()
{
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++)
scanf("%d%d",&v[i].a,&v[i].b);
}
int calc(int p)
{
int i,s=0,salv;
for (i=1; i<=n; i++)
{
salv=p;
s+=v[i].a*(salv/(2*v[i].b));
if (s>=m)
break;
}
return s;
}
int cbin()
{
int i, step;
for (step = 1; step < 22542; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < 22542 && calc(i + step) < m)
i += step;
return ++i;
}
int calcul(int x,int y,int t)
{
int rez;
rez=x*(t/(2*y));
return rez;
}
int compar(const void *p,const void*q)
{
camion x=*(camion*)p;
camion y=*(camion*)q;
int g,h;
g=calcul(x.a,x.b,tmin);
h=calcul(y.a,y.b,tmin);
if (g>h)
return -1;
if (g<h)
return 1;
return 0;
}
void solve()
{
tmin=cbin();
qsort(v+1,n,sizeof(v[0]),compar);
int i,s_act=0,salv;
for (i=1; i<=n; i++)
{
salv=tmin;
s_act+=v[i].a*(salv/(2*v[i].b));
nrmin=i;
if (s_act>=m)
break;
}
printf("%d %d\n",tmin,nrmin);
}
int main()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
read();
solve();
return 0;
}