Pagini recente » Cod sursa (job #1350411) | Cod sursa (job #862286) | Cod sursa (job #3159732) | Cod sursa (job #1217227) | Cod sursa (job #3289226)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
const int N=105;
struct elem
{
int a,b,i,ans1,ans2;
};
bool cmp(elem x,elem y)
{
double p=1.0*x.a/y.a-1.0*x.b/y.b;
if(p>=1) return (x.a*y.b>x.b*y.a);
else return (x.a*y.b<x.b*y.a);
}
bool cmp2(elem x,elem y)
{
return x.i<y.i;
}
int n,l,i,j,r,t,st,dr,mid,sol,lim[N];
elem v[N];
bool vrf(int r)
{
int i,t=0,q=0;
for(i=1;i<=n;++i)
{
lim[i]=r/v[i].a;
t+=lim[i];
}
if(t<l) return 0;
for(i=1;i<=n;++i)
{
while(t>l && lim[i]>=1)
{
--t;
--lim[i];
}
q+=(r-lim[i]*v[i].a)/v[i].b;
}
if(q<l) return 0;
return 1;
}
void cpy_ans(int r)
{
for(i=1;i<=n;++i)
{
v[i].ans1=lim[i];
v[i].ans2=(r-lim[i]*v[i].a)/v[i].b;
}
}
void print()
{
fout<<sol<<'\n';
sort(v+1,v+n+1,cmp2);
for(i=1;i<=n;++i)
{
fout<<v[i].ans1<<' '<<v[i].ans2<<'\n';
}
}
signed main()
{
fin>>n>>l;
for(i=1;i<=n;++i)
{
fin>>v[i].a>>v[i].b;
v[i].i=i;
}
sort(v+1,v+n+1,cmp);
st=1; dr=200;
while(st<=dr)
{
mid=(st+dr)>>1;
if(vrf(mid))
{
cpy_ans(mid);
sol=mid;
dr=mid-1;
}
else
{
st=mid+1;
}
}
print();
return 0;
}