Pagini recente » Cod sursa (job #1728355) | Cod sursa (job #1373849) | Cod sursa (job #1451745) | Cod sursa (job #1390983) | Cod sursa (job #2257008)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int tester(int volume, int V[], int n);
int binker(int left, int right, int x);
int main()
{
int N, K, maxSaltVolume;
int left, right, middle, transport = 0;
int Volume[16000];
freopen("transport.in", "rt", stdin);
freopen("transport.out", "wt", stdout);
cin >> N >> K;
for(int i = 0; i < N; i++)
cin >> Volume[i];
if(N <= K){
maxSaltVolume = Volume[0];
for(int i = 1; i < N; i++)
if(maxSaltVolume < Volume[i])
maxSaltVolume = Volume[i];
cout << maxSaltVolume << '\n';
}
else if(N > K){
left = 1;
right = 16000 * N;
while(left != right){
middle = (left + right) / 2;
transport = tester(middle, Volume, N);
if(transport <= K)
right = middle;
else if(transport > K)
left = middle + 1;
}
cout << middle + 1 << '\n';
}
return 0;
}
int tester(int volume, int V[], int n)
{
int transport = 0, salt = 0;
for(int i = 0; i < n; i++){
if(salt + V[i] > volume){
transport++;
salt = V[i];
}
else
salt += V[i];
}
return transport + 1;
}