Pagini recente » Cod sursa (job #1037436) | Cod sursa (job #1330969) | Cod sursa (job #1135271) | Cod sursa (job #69836) | Cod sursa (job #766540)
Cod sursa(job #766540)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("lapte.in");
ofstream out("lapte.out");
struct ins
{
int a,b,nr,a1,b1;
};
ins x[111];
int l,n;
int t;
bool cmp1(ins x,ins y)
{
//return (double)t/x.a-(double)t/x.b>(double)t/y.a-(double)t/y.b;
return x.a*y.b<y.a*x.b;
}
bool cmp2(ins x,ins y)
{
return x.nr<y.nr;
}
bool ok(int timp)
{
int la=l,lb=l,i=1;
t=timp;
sort(x+1,x+n+1,cmp1);
while(i<=n && la)
{
if(la<timp/x[i].a)
{
x[i].a1=la;
x[i].b1=(timp-la*x[i].a)/x[i].b;
lb-=(timp-la*x[i].a)/x[i].b;
++i;
la=0;
break;
}
la-=timp/x[i].a;
x[i].a1=timp/x[i].a;
x[i].b1=0;
++i;
}
while(i<=n && lb>0)
{
lb-=timp/x[i].b;
x[i].a1=0;
x[i].b1=timp/x[i].b;
++i;
}
for(i++;i<=n;++i)
x[i].a1=x[i].b1=0;
if(la<=0 && lb<=0)
return true;
return false;
}
int cauta()
{
int i,pas=1<<13;
for(i=0;pas;pas/=2)
{
if(i+pas<=l && !ok(i+pas))
i+=pas;
}
if(ok(i+1))
return i+1;
}
int main()
{
int i;
in>>n>>l;
for(i=1;i<=n;++i)
{
in>>x[i].a>>x[i].b;
x[i].nr=i;
}
out<<cauta()<<"\n";
sort(x+1,x+n+1,cmp2);
for(i=1;i<=n;++i)
out<<x[i].a1<<" "<<x[i].b1<<"\n";
return 0;
}