Pagini recente » Cod sursa (job #2773472) | Cod sursa (job #46013) | Cod sursa (job #1365154) | Cod sursa (job #1941667) | Cod sursa (job #1575826)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct om
{
int v1,v2,id;
};
struct sol
{
int v1,v2,id;
};
bool myfunction (om i,om j)
{
if(i.v1==j.v1) return i.v2>j.v2;
return i.v1< j.v1;
}
bool mycomp ( sol i,sol j)
{
return i.id<j.id;
}
om pers[101];
sol sol[101],rel[101];
int n,l;
int isok(int tmp)
{
int j,i,c1=0,c2=0,ca1=0,ca2=0;
for(i=1;i<=n;i++)
{
sol[i].id=pers[i].id; sol[i].v1=0; sol[i].v2=0;
if(c1>=l) { ca2=tmp/pers[i].v2; c2+=ca2; sol[i].v2=ca2; }
else
{
if(l-c1 >= tmp/pers[i].v1) { ca1=tmp/pers[i].v1; c1+=ca1; sol[i].v1=ca1; }
else
{
sol[i].v1=l-c1;
ca2=(tmp-(l-c1)*pers[i].v1)/pers[i].v2;
c1=l;
c2+=ca2; sol[i].v2=ca2;
}
}
}
if(c1>=l && c2>=l)
{
for(i=1;i<=n;i++) { rel[i].id=sol[i].id; rel[i].v1=sol[i].v1; rel[i].v2=sol[i].v2; }
return 1;
}
else return 0;
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
int poz,lc,i;
cin>>n>>l;
for(i=1;i<=n;i++) { cin>>pers[i].v1>>pers[i].v2; pers[i].id=i; }
for(poz=1;poz<100;poz<<=1);
sort(pers+1,pers+n+1,myfunction);
// for(i=1;i<=n;i++)
// cout<<pers[i].id<<' '<<pers[i].v1<<' '<<pers[i].v2<<'\n';
for(i=100,lc=poz; lc; lc>>=1)
{
//cout<<lc<<' '<<i<<'\n';
if(i-lc>0 && isok(i-lc) ) i-=lc;
}
cout<<i<<'\n';
sort(rel+1,rel+n+1,mycomp);
for(i=1;i<=n;i++) cout<<rel[i].v1<<' '<<rel[i].v2<<'\n';
return 0;
}