Pagini recente » Cod sursa (job #2804933) | Cod sursa (job #2177594) | Cod sursa (job #2280838) | Cod sursa (job #1038775) | Cod sursa (job #155477)
Cod sursa(job #155477)
#include <stdio.h>
#include <stdlib.h>
#define TMAX 100
struct milkdrinker
{
int a,b,p,a2,b2;
};
milkdrinker v[TMAX+1];
int cmp(const void *a, const void *b)
{
milkdrinker x=*(milkdrinker*)a, y=*(milkdrinker*)b;
return (x.a-x.b)-(y.a-y.b);
}
int cmp2(const void *a, const void *b)
{
milkdrinker x=*(milkdrinker*)a, y=*(milkdrinker*)b;
return x.p-y.p;
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
int i,s,e,a,b,t,tt,n,S,K=0;
scanf("%d%d",&n,&S);
for (i=0; i<n; i++)
{
scanf("%d%d",&v[i].a,&v[i].b);
v[i].p=i;
}
qsort(v,n,sizeof(v[0]),cmp);
s=1; e=TMAX;
while (s!=e)
{
a=0; b=0;
t=(s+e)/2; tt=0;
i=0;
while (a<S && i<n)
a+=t/v[i++].a;
i--;
while (a>S)
{
a--;
tt+=v[i].a;
}
b+=tt/v[i++].b;
while (b<S && i<n)
b+=t/v[i++].b;
if (a>=S && b>=S)
e=(s+e)/2;
else
s=(s+e)/2+1;
}
printf("%d\n",s); a=0; b=0; K=0;
for (i=0; i<n;i++)
{
if (K==0)
if (a+s/v[i].a<S)
{
a+=s/v[i].a;
v[i].a2=s/v[i].a;
v[i].b2=0;
}
else
{
t=0;
while (a<S)
{
a++;
t++;
}
v[i].a2=t;
v[i].b2=(s-v[i].a*t)/v[i].b;
K=1;
}
else
{
v[i].a2=0;
v[i].b2=s/v[i].b;
}
}
qsort(v,n,sizeof(v[0]),cmp2);
for (i=0; i<n; i++)
printf("%d %d\n",v[i].a2,v[i].b2);
fclose(stdout);
fclose(stdin);
return 0;
}