Pagini recente » Cod sursa (job #2498010) | Cod sursa (job #1916276) | Cod sursa (job #2296428) | Cod sursa (job #3175195) | Cod sursa (job #885313)
Cod sursa(job #885313)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n,l,i,ls,sol,mij,li;
struct cp{int a,b,p;};
cp v[110],rez[110];
bool cmp(cp a,cp b)
{
return a.a-a.b<b.a-b.b;
}
bool verif(int x)
{
int c=1,l1=0,l2=0;
for(int i=1;i<=n;++i)
rez[i].a=0,rez[i].b=0;
while(c<=n&&l1<l)
{
if(l1+x/v[c].a>=l)
{
rez[v[c].p].a=l-l1;
l2=(x-(l-l1)*v[c].a)/v[c].b;
rez[v[c].p].b=l2;
++c;
break;
}
l1+=x/v[c].a;
rez[v[c].p].a=x/v[c].a;
++c;
}
while(c<=n&&l2<l)
{
l2+=x/v[c].b;
rez[v[c].p].b=x/v[c].b;
++c;
}
return l2>=l;
}
int main()
{
f>>n>>l;
for(i=1;i<=n;++i)
{
f>>v[i].a>>v[i].b;
v[i].p=i;
}
sort(v+1,v+n+1,cmp);
li=0;
ls=1<<15
;
while(li<=ls)
{
mij=(li+ls)>>1;
if(verif(mij))
ls=mij-1,sol=mij;
else
li=mij+1;
}
// ++sol;
verif(sol);
g<<sol<<'\n';
for(i=1;i<=n;++i)
g<<rez[i].a<<' '<<rez[i].b<<'\n';
return 0;
}