Pagini recente » Cod sursa (job #1965646) | Cod sursa (job #1053423) | Cod sursa (job #3256210) | Cod sursa (job #704657) | Cod sursa (job #783149)
Cod sursa(job #783149)
#include <fstream>
#include <algorithm>
#define MAX 128
using namespace std;
struct copil
{
int a, b, ind, ca, cb;
}v[MAX];
int l, n;
bool cmpL(copil x, copil y)
{
return (x.a - x.b) < (y.a - y.b);
}
bool cmpI(copil x, copil y)
{
return x.ind < y.ind;
}
bool ok(int val)
{
int a = l, b = l, i = 1, timp, canConsume;
while(a && i <= n)
{
v[i].ca = v[i].cb = 0;
canConsume = val / v[i].a;
timp = val;
if(canConsume >= a)
{
timp -= v[i].a * a;
v[i].ca = a;
a = 0;
v[i].cb = timp / v[i].b;
b -= v[i].cb;
}
else
{
v[i].ca = canConsume;
timp -= v[i].a * v[i].ca;
a -= v[i].ca;
v[i].cb = timp / v[i].b;
b -= v[i].cb;
}
i++;
}
for(; i <= n; i++)
{
v[i].ca = v[i].cb = 0;
v[i].cb = val / v[i].b;
b -= v[i].cb;
}
if(a <= 0 && b <= 0) return true;
return false;
}
int getResult()
{
int l = 0, r = 256, m, sol;
while(l <= r)
{
m = (l + r) >> 1;
if(ok(m))
{
sol = m;
r = m - 1;
}
else
l = m + 1;
}
if(ok(sol))
return sol;
}
int main()
{
ifstream in("lapte.in");
in>>n>>l;
for(int i = 1; i <= n; i++)
{
in>>v[i].a>>v[i].b;
v[i].ind = i;
} in.close();
sort(v + 1, v + n + 1, cmpL);
ofstream out("lapte.out");
out<<getResult()<<"\n";
sort(v + 1, v + n + 1, cmpI);
for(int i = 1; i <= n; i++)
out<<v[i].ca<<" "<<v[i].cb<<"\n";
return 0;
}