Pagini recente » Cod sursa (job #2001375) | Cod sursa (job #537570) | Cod sursa (job #883165) | Cod sursa (job #2700522) | Cod sursa (job #28404)
Cod sursa(job #28404)
//029 Lapte - solutie greedy euristic & cautare binara nlog n
#include <stdio.h>
#include <stdlib.h>
#define INPUT "lapte.in"
#define OUTPUT "lapte.out"
#define MAX 101
int N, L, T;
struct pers
{
int ta, tb, n_ord;
}v[MAX];
int comp(const void *a, const void *b)
{
if( (((pers*)a)->ta) * (((pers*)b)->tb) > (((pers*)b)->ta) * (((pers *)a)->tb)) return 1;
return -1;
}
int OK(int tmax)
{
int i, la = 0, lb = 0, t;
for(i = 1; i <= N; ++i)
{
if(la < L)
{
if(L-la < tmax/v[i].ta)
t = tmax-v[i].ta*(L-la),
la = L;
else la += tmax/v[i].ta ,
t = tmax %v[i].ta;
}
else t = tmax;
lb += t/v[i].tb;
if(la >= L && lb >= L) return 1;
}
return 0;
}
int main()
{
freopen(INPUT, "r", stdin);
scanf("%d %d", &N, &L);
int i;
for(i = 1; i <= N; ++i)
scanf("%d %d", &v[i].ta, &v[i].tb),
v[i].n_ord = i;
qsort(v+1, N, sizeof(v[0]), comp);
int in = 0, sf = MAX, mij;
while(in < sf)
{
mij = (in + sf)/2;
if( OK(mij) ) sf = mij;
else in = mij + 1;
}
freopen(OUTPUT, "w", stdout);
printf("%d", in);
return 0;
}