Pagini recente » Cod sursa (job #366189) | Monitorul de evaluare | Cod sursa (job #751325) | Cod sursa (job #49840) | Cod sursa (job #1549752)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int v[16005], n,k;
long long s;
int nr_transporturi(int c) {
int nr = 1, cap = c;
for(int i = 1 ; i <= n ; ++ i) {
if(cap >= v[i]) {
cap -= v[i];
}
else {
nr++;
cap = c - v[i];
}
}
return nr;
}
int main()
{
in>>n>>k;
int maxim=-1;
for(int i=1;i<=n;i++)
{
in>>v[i];
s+=v[i];
if(maxim < v[i])
maxim = v[i];
}
/// nr_transporturi(x) - O(n)
int st = maxim, dr = s, rasp = -1;
while(st<=dr)
{
int mij=(st+dr)/2;
int aux = nr_transporturi(mij);
if(aux <= k) {
rasp = mij;
dr = mij - 1;
}
else {
st = mij + 1;
}
}
out << rasp << '\n';
return 0;
}