Pagini recente » Cod sursa (job #312428) | Cod sursa (job #2856262) | Cod sursa (job #523944) | Cod sursa (job #422861) | Cod sursa (job #1167938)
#include<stdio.h>
int main()
{
long long cmin = 1; // capacitatea minima a camionului
long long cmax = 5000000000000; // capacitatea maxima a camionului
long long c_actuala_din_camion_maxima; // capacitatea actuala a camionului
long long capacitatea_actuala_trimisa; // capacitatea actuala trimisa
int nr_transporturi_efectuate; // nr de transporturi in capacitatea actuala
long long capacitatea_minima = cmax;
int p;
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int nr_saltele, nr_maxim_transporturi;
int saltele[16500];
scanf("%d%d", &nr_saltele, &nr_maxim_transporturi);
for(int i = 0; i < nr_saltele; ++i)
{
scanf("%d", &saltele[i]);
}
while(cmin <= cmax)
{
c_actuala_din_camion_maxima = (cmin + cmax) / 2;
int saltele_livrate = 0;
nr_transporturi_efectuate = 0;
do
{
capacitatea_actuala_trimisa = 0;
while(capacitatea_actuala_trimisa <= c_actuala_din_camion_maxima && saltele[saltele_livrate] <= c_actuala_din_camion_maxima)
{
capacitatea_actuala_trimisa += saltele[saltele_livrate];
saltele_livrate++;
if(saltele_livrate == nr_saltele)
{
if(c_actuala_din_camion_maxima <= capacitatea_minima && capacitatea_actuala_trimisa <= c_actuala_din_camion_maxima && nr_transporturi_efectuate < nr_maxim_transporturi)
{
capacitatea_minima = c_actuala_din_camion_maxima;
cmax = c_actuala_din_camion_maxima - 1;
break;
}
else if(capacitatea_actuala_trimisa > c_actuala_din_camion_maxima)
{
capacitatea_actuala_trimisa -= saltele[saltele_livrate-1];
saltele_livrate--;
break;
}
}
}
if(capacitatea_actuala_trimisa > c_actuala_din_camion_maxima)
{
capacitatea_actuala_trimisa -= saltele[saltele_livrate-1];
saltele_livrate--;
}
nr_transporturi_efectuate++;
if(nr_transporturi_efectuate > nr_maxim_transporturi)
{
cmin = c_actuala_din_camion_maxima + 1;
break;
}
}while(saltele_livrate < nr_saltele);
}
printf("%d\n", capacitatea_minima);
return 0;
}