Pagini recente » Cod sursa (job #1010094) | Cod sursa (job #796848) | Cod sursa (job #1026239) | Cod sursa (job #2046325) | Cod sursa (job #198244)
Cod sursa(job #198244)
#include<stdio.h>
long n,l,i,tmin,ta[101],ca[101],sa[101],tb[101],cb[101],sb[101],s,d,m,ok;
void citire();
void back(long A,long B,long I);
void print_sol();
int main()
{ citire();
s=0;d=101;
while(d-s-1)
{ m=(s+d)/2;
ok=0;
back(l,l,1);
if(ok)d=m;
else s=m;
}
tmin=d;
print_sol();
return 0;
}
void back(long A,long B,long I)
{ long b;
if(!A&&!B)
{ for(i=1;i<I;i++){sa[i]=ca[i];sb[i]=cb[i];}
for(i=I;i<=n;i++){sa[i]=0;sb[i]=0;}
ok=1;
return;
}
if(I==n+1)return;
if(!A)
{ cb[I]=(m/tb[I]<B)?m/tb[I]:B;
back(A,B-cb[I],I+1);return;
}
if(!B)
{ ca[I]=(m/ta[I]<A)?m/ta[I]:A;
back(A-ca[I],B,I+1);return;
}
ca[I]=(m/ta[I]<A)?m/ta[I]:A;
cb[I]=(m-ta[I]*ca[I])/tb[I];
cb[I]=(cb[I]<B)?cb[I]:B;
while(ca[I]>=0)
{
back(A-ca[I],B-cb[I],I+1);
if(ok)return;
if(cb[I]==B)return;
b=cb[I];
do
{ ca[I]--;
cb[I]=(m-ta[I]*ca[I])/tb[I];
cb[I]=(cb[I]<B)?cb[I]:B;
}while(cb[I]==b&&ca[I]>=0);
if(cb[I]==b)return;
}
}
void citire()
{
freopen("lapte.in","rt",stdin);
scanf("%ld%ld",&n,&l);
for(i=1;i<=n;i++) scanf("%ld%ld",&ta[i],&tb[i]);
tmin=101;
}
void print_sol()
{
freopen("lapte.out","wt",stdout);
printf("%ld\n",tmin);
for(i=1;i<=n;i++)printf("%ld %ld\n",sa[i],sb[i]);
}