Pagini recente » Cod sursa (job #2738601) | Cod sursa (job #606369) | Cod sursa (job #2094638) | Cod sursa (job #2658149) | Cod sursa (job #482194)
Cod sursa(job #482194)
#include <stdio.h>
int v[16001];
int n, i, j, k;
int trans;
long int S;
int stanga, dreapta, mijl;
int Transport_It (int m)
{
int suma = 16000000, trans = 0;
for (i=1; i<=n; ++i)
{
if (suma + v[i] > m && v[i] <= m)
{
trans ++;
suma = v[i];
}
else
if (suma + v[i] <= m)
suma += v[i];
if (v[i] > m)
return 0;
if (trans > k)
return 0;
}
return 1;
}
int main ()
{
FILE *f = fopen ("transport.in","r");
FILE *g = fopen ("transport.out","w");
fscanf (f,"%d %d", &n, &k);
for (i=1; i<=n; ++i)
{
fscanf (f,"%d", &v[i]);
S += v[i];
}
fclose(f);
stanga = 1;
dreapta = S;
while (stanga <= dreapta)
{
mijl = (stanga + dreapta) / 2;
if (Transport_It(mijl))
dreapta = mijl - 1;
else
stanga = mijl + 1;
}
fprintf (g,"%d", stanga);
fclose(g);
return 0;
}