Pagini recente » Cod sursa (job #2449527) | Cod sursa (job #403499) | Cod sursa (job #750190) | Cod sursa (job #1356802) | Cod sursa (job #482191)
Cod sursa(job #482191)
#include <stdio.h>
using namespace std;
long long v[16001];
int n, K, i, j, k;
long long st, dr, mijl;
int Min = 160000001;
int verificare ()
{
int grupe = 0, cap = 0;
i = 1;
while (i <= n)
{
while (cap + v[i] <= mijl)
{
cap += v[i];
i ++;
}
cap = 0;
grupe ++;
}
if (grupe <= K)
return 1;
else
return 0;
}
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,"%lld", &v[i]);
if (v[i] > st)
st = v[i];
dr += v[i];
}
while (st <= dr)
{
mijl = (st + dr) / 2;
if (verificare ())
{
if (mijl < Min)
Min = mijl;
dr = mijl - 1;
}
else if (mijl < Min)
st = mijl + 1;
}
fprintf (g, "%lld\n", mijl);
fclose (g);
fclose (f);
return 0;
}