Pagini recente » Cod sursa (job #2389954) | Cod sursa (job #1455377) | Cod sursa (job #139117) | Cod sursa (job #2392084) | Cod sursa (job #1495085)
#include <stdio.h>
#define N_MAX 16002
using namespace std;
FILE *f, *g;
int v[N_MAX];
int sPart[N_MAX];
int n, k;
int max = -1;
//bool found = false;
void citire();
int transporta(int);
int main()
{
int st, dr, m;
int t;
//int lm;
citire();
t = N_MAX;
st = max;
dr = sPart[n];
while (st < dr - 1){
m = (st + dr)/2;
t = transporta(m);
if (t > k)
st = m + 1;
else
dr = m;
//lm = m;
}
fprintf(g, "%d\n", m);
fclose(g);
return 0;
}
void citire(){
f = fopen("transport.in", "r");
g = fopen("transport.out", "w");
fscanf(f, "%d%d", &n, &k);
for (int i = 1; i <= n; ++i){
fscanf(f, "%d", &v[i]);
sPart[i] = sPart[i-1] + v[i];
if (v[i] > max)
max = v[i];
}
fclose(f);
}
int transporta(int m){
int ck = 0;
int saltea = 0;
int i;
while (ck <= k && saltea <= n){
i = saltea + 1;
while (sPart[i] - sPart[saltea] <= m && i <= n)
++i;
saltea = i;
ck++;
}
return ck;
}