Pagini recente » Cod sursa (job #2077414) | Cod sursa (job #219937) | Cod sursa (job #1147974) | Cod sursa (job #858252) | Cod sursa (job #322537)
Cod sursa(job #322537)
#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 i, step;
for (step = 1; step < 20; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < 20 && 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;
}