Pagini recente » Cod sursa (job #1159434) | Cod sursa (job #1622256) | Cod sursa (job #2825458) | Cod sursa (job #2419723) | Cod sursa (job #3289215)
#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)
{
return (x.a*y.b>x.b*y.a)||(x.a*y.b==x.b*y.a && x.b<y.b);
}
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;
}