Pagini recente » Cod sursa (job #1571149) | Cod sursa (job #2497603) | Cod sursa (job #943211) | Cod sursa (job #1106732) | Cod sursa (job #322527)
Cod sursa(job #322527)
#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 nr=0;
char x;
while (scanf("%c",&x)!=EOF)
{
if (x==' ')
{
v[r].a=nr;
nr=0;
continue;
}
if (x=='\n')
{
v[r].b=nr;
nr=0;
r++;
continue;
}
nr=nr*10+x-'0';
}
if (nr)
v[r].b=nr;
}
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 st=1,dr=N,mij,t,rez;
while (st<=dr)
{
mij=(st+dr)/2;
t=calc(mij);
if (t>=m)
{
dr=mij-1;
rez=mij;
}
else
st=mij+1;
}
return rez;
}
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;
}