Pagini recente » Cod sursa (job #3210786) | Cod sursa (job #1849977) | Cod sursa (job #2157118) | Cod sursa (job #430293) | Cod sursa (job #2698470)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[16005];
int n, k;
bool goHigher(int mid)
{
int sum = 0;
int cont = k;
for(int i = 0; i < n; i++)
{
sum += v[i];
if(sum > mid)
{
cont--;
sum = v[i];
}
else if(sum == mid)
{
cont--;
sum = 0;
}
}
if(sum < mid) { cont--; }
return (cont < 0);
}
int binarySearch(int left, int right)
{
int bestVal = -1;
while(left <= right)
{
int mid = (left + right) / 2;
if(goHigher(mid))
{
left = mid + 1;
}
else
{
bestVal = mid;
right = mid - 1;
}
}
return bestVal;
}
int main()
{
fin >> n >> k;
int min = 256000000, max = 0;
for(int i = 0; i < n; i++)
{
fin >> v[i];
if (v[i] < min) { min = v[i]; }
max += v[i];
}
fout << binarySearch(min, max);
}