Pagini recente » Cod sursa (job #1548811) | Cod sursa (job #1628556) | Cod sursa (job #2748948) | Cod sursa (job #2933694) | Cod sursa (job #2925936)
//Ilie Dumitru
#include<cstdio>
#include<algorithm>
struct om
{
int a, b, i;
friend bool operator<(om x, om y) {return x.a*y.b>y.a*x.b;}
};
om v[100];
int N, L;
bool is_enough(int T)
{
int a=0, b=0, i, x;
for(i=0;i<N && (a<L || b<L);++i)
{
if(b>=L)
a+=T/v[i].a;
else
{
x=T/v[i].b;
if(b+x>=L)
{
x=L-b;
a+=(T-x*v[i].b)/v[i].a;
b=L;
}
else
{
b+=x;
a+=(T-x*v[i].b)/v[i].a;
}
}
}
return a>=L && b>=L;
}
void gen_sol(int T)
{
int b=0, i, x;
om aux;
for(i=0;i<N;++i)
{
if(b>=L)
{
v[i].a=T/v[i].a;
v[i].b=0;
}
else
{
x=T/v[i].b;
if(b+x>=L)
{
x=L-b;
v[i].a=(T-x*v[i].b)/v[i].a;
v[i].b=x;
b=L;
}
else
{
b+=x;
v[i].a=(T-x*v[i].b)/v[i].a;
v[i].b=x;
}
}
}
for(i=0;i<N;++i)
{
while(v[i].i!=i)
{
aux=v[i];
v[i]=v[aux.i];
v[aux.i]=aux;
}
}
}
int main()
{
FILE* f=fopen("lapte.in", "r"), *g=fopen("lapte.out", "w");
int i, l, r, m;
fscanf(f, "%d%d", &N, &L);
for(i=0;i<N;++i)
fscanf(f, "%d%d", &v[i].a, &v[i].b), v[i].i=i;
fclose(f);
std::sort(v, v+N);
l=0;
r=101;
while(r-l>1)
{
m=(l+r)>>1;
if(is_enough(m))
r=m;
else
l=m;
}
fprintf(g, "%d\n", r);
gen_sol(r);
for(i=0;i<N;++i)
fprintf(g, "%d %d\n", v[i].a, v[i].b);
fclose(g);
return 0;
}