Pagini recente » Cod sursa (job #2068971) | Cod sursa (job #357853) | Cod sursa (job #2526845) | Cod sursa (job #845739) | Cod sursa (job #176722)
Cod sursa(job #176722)
#include<stdio.h>
#include<algorithm>
#define pb push_back
#include<vector>
using namespace std;
vector <pair <double,int> > VECT;
int X[110],Y[110],NR1[110],NR2[110];
int N,L;
bool ver(int x)
{
int A = L,B = L;
for(vector <pair<double,int> > :: iterator it = VECT.begin();it != VECT.end(); ++it)
{
int i = (*it).second;
if (A > x / X[i])
{
A -= x / X[i];
NR1[i] = x / X[i];
}
else
{
NR1[i] = A;
A = 0;
}
int scB = (x - (NR1[i] * X[i])) / Y[i];
if (scB >= B)
{
NR2[i] = B;
B = 0;
}
else
{
B -= scB;
NR2[i] = scB;
}
// printf("%d %d %d %d\n",x,A,B,i);
}
// printf("%d\n",((A != 0) || (B != 0)));
return ((A == 0) && (B == 0));
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d %d",&N,&L);
for(int i = 1;i <= N; ++i)
{
scanf("%d %d",&X[i],&Y[i]);
VECT.pb(make_pair (1.0 * X[i] / Y[i],i) );
}
// printf("%d\n",L);
sort(VECT.begin(),VECT.end());
int p = 0;
int x = 0;
for(p = 1;p <= 10000; p <<= 1);
for(;p;p >>= 1)
if (!ver(x + p))
{
x += p;
}
++x;
ver(x);
printf("%d\n",x);
for(int i = 1;i <= N; ++i) printf("%d %d\n",NR1[i],NR2[i]);
return 0;
}