Cod sursa(job #176720)

Utilizator mariusdrgdragus marius mariusdrg Data 11 aprilie 2008 16:22:59
Problema Lapte Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#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 <= 100; 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;
}