Pagini recente » Algoritmiada 2014 - Clasament Runda 2, Clasele 11-12 | Cod sursa (job #1066930) | Rating Koncsag Beata (bkoncsag) | Cod sursa (job #124484) | Cod sursa (job #195879)
Cod sursa(job #195879)
#include <stdio.h>
#define Nmax 16001
int N, K, i, c[Nmax], st, dr;
inline int max(int x, int y) { return x > y ? x : y; }
int search(int,int);
int ok(int);
int main()
{
for(freopen("transport.in", "r", stdin), scanf("%d %d", &N, &K), i = 1; i<=N; ++i) { scanf("%d\n", c+i); dr+=c[i]; st = max(st,c[i]); }
fprintf(fopen("transport.out", "w"), "%d", search(st,dr));
return 0;
}
int search(int st, int dr)
{
if (st == dr) return st;
if (st + 1 == dr)
{
if (ok(st)) return st;
return dr;
}
int m = (st + dr) >> 1;
if (ok(m))
return search(st,m);
else
return search(m,dr);
}
int ok(int C)
{
int nr = 1, temp = 0;
for (i = 1; i<=N; ++i)
{
if (c[i] > C) return 0;
if (temp + c[i] <= C)
{
temp+=c[i];
}
else
{
nr++;
temp = c[i];
}
if (nr > K) return 0;
}
return 1;
}