Cod sursa(job #766547)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("lapte.in");
ofstream out("lapte.out");
const int N=105;
int n,l;
struct point
{
int a,b,poz;
};
point x[N],rez[N];
bool cmp(point x, point y)
{
return x.a-x.b < y.a-y.b;
}
bool ok(int t)
{
int la=0,lb=0,k;
k=1;
while(k<=n && la<l)
{
la+=t/x[k].a;
rez[x[k].poz].a=t/x[k].a;
k++;
}
lb+=((la-l)*x[k-1].a)/x[k-1].b;
rez[x[k-1].poz].a=(t-lb*x[k-1].b)/x[k-1].a;
rez[x[k-1].poz].b=lb;
while(k<=n)
{
lb+=t/x[k].b;
rez[x[k].poz].b=t/x[k].b;
k++;
}
if(lb>=l)
return true;
return false;
}
int bs()
{
int i,pas=1<<7;
for(i=1;pas;pas>>=1)
{
if(i+pas<=N && !ok(i+pas))
i+=pas;
}
return i+1;
}
int main()
{
int i,t;
in>>n>>l;
for(i=1;i<=n;i++)
{
in>>x[i].a>>x[i].b;
x[i].poz=i;
}
sort(&x[1],&x[n+1],cmp);
t=bs();
out<<t<<"\n";
i=ok(t);
for(i=1;i<=n;i++)
out<<rez[i].a<<" "<<rez[i].b<<"\n";
return 0;
}