Pagini recente » Cod sursa (job #2700096) | Cod sursa (job #1584458) | Cod sursa (job #1004309) | Cod sursa (job #1116339) | Cod sursa (job #1120016)
#include<fstream>
#include<algorithm>
#include<cstring>
#define N 110
#define vit pair<pair<int,int>,int>
#define a first.first
#define b first.second
#define p second
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int i,li,l,n,ls,mij,sol;
vit v[N],rez[N];
inline bool verif(int x)
{
memset(rez,0,sizeof(rez));
int la=0,lb=0,i=1;
while(i<=n&&la<l)
{
if(la+x/v[i].a>l)
{
rez[v[i].p].a=l-la;
lb=(x-((l-la)*v[i].a))/v[i].b;
la=l;
rez[v[i].p].b=lb;
}
else
{
rez[v[i].p].a=x/v[i].a;
la+=rez[v[i].p].a;
}
++i;
}
while(i<=n&&lb<l)
{
if(lb+x/v[i].b>l)
{
rez[v[i].p].b=l-lb;
return 1;
}
else
{
rez[v[i].p].b=x/v[i].b;
lb+=rez[v[i].p].b;
}
++i;
}
if(lb>=l)
return 1;
return 0;
}
inline bool cmp(vit x,vit y)
{
return x.a-x.b<y.a-y.b;
}
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=10000;
while(li<=ls)
{
mij=(li+ls)>>1;
if(verif(mij))
{
ls=mij-1;
sol=mij;
}
else
{
li=mij+1;
}
}
g<<sol<<'\n';
verif(sol);
for(i=1;i<=n;++i)
g<<rez[i].a<<' '<<rez[i].b<<'\n';
return 0;
}