Pagini recente » Cod sursa (job #1231040) | Cod sursa (job #3256051) | Cod sursa (job #1291954) | Cod sursa (job #3266844) | Cod sursa (job #1027426)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
ifstream input("lapte.in");
ofstream output("lapte.out");
int N , L , T;
pair<int,int> vect[200];
bool cmp(const pair<int,int> & a , const pair<int,int> & b)
{
return (double(a.first)/double(a.second)) < ((double(b.first)/double(b.second)));
}
int main()
{
input >> N >> L;
for (int i = 0;i<N;i++)
input >> vect[i].first >> vect[i].second;
int left = 1;
int right = 100;
sort(vect , vect + N , cmp);
int min_time = 1000;
pair<int,int> raspuns[200];
while (left <= right)
{
int middle = (left + right) >> 1;
pair<int,int> lapte[200];
int LA = L;
int LB = L;
int i = 0;
for (i = 0;i<N;i++)
{
int lapte_auxA = middle / vect[i].first;
int lapte_auxB = middle / vect[i].second;
if (LA >= lapte_auxA)
{
LA -= lapte_auxA;
lapte[i] = pair<int,int>(lapte_auxA , 0);
}
else if (LA > 0)
{
int timpA = LA * vect[i].first;
int timpB = middle - timpA;
lapte[i] = pair<int,int>(LA , timpB / vect[i].second);
LB -= lapte[i].second;
LA = 0;
}
else if (LB >= lapte_auxB)
{
LB -= lapte_auxB;
lapte[i] = pair<int,int>(0 , lapte_auxB);
}
else if (LB > 0)
{
lapte[i] = pair<int,int>(0 , LB);
LB = 0;
break;
}
else
{
LB = 0;
break;
}
}
if (LB == 0 && LA == 0)
{
right = middle - 1;
if (middle < min_time)
{
min_time = middle;
for (int i = 0;i<N;i++)
raspuns[i] = lapte[i];
}
}
else if (LB != 0 || LA != 0)
{
left = middle + 1;
}
}
output << min_time << "\n";
for (int i = 0;i<N;i++)
output << raspuns[i].first << " " << raspuns[i].second << "\n";
return 0;
}