Pagini recente » Cod sursa (job #185460) | Profil Ovidiu-Antonio | Cod sursa (job #2009830) | Cod sursa (job #772001) | Cod sursa (job #3154078)
#include <bits/stdc++.h>
const int nmax = 2e4+5;
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int saltele[nmax], n, Max = 0;
bool check(int cap, int drumuri){
int x = 0;
for(int i=1;i<=n;i++){
x += saltele[i];
if(x==cap){
x = 0;
drumuri--;
} else if (x>cap){
i--;
x = 0;
drumuri--;
}
if(drumuri<=0){
return false;
}
}
return true;
}
int main()
{
int k, ans = 1e6;
in >> n >> k;
for(int i=1;i<=n;i++){
in >> saltele[i];
Max = max(Max, saltele[i]);
}
int st = 1, dr = Max*2;
while(st < dr){
int mid = (st+dr)/2;
if(check(mid, k)){
ans = min(ans, mid);
dr = mid;
} else {
st = mid+1;
}
cout << "\n";
}
out << ans;
return 0;
}