Pagini recente » Cod sursa (job #2410719) | Borderou de evaluare (job #2953670) | Cod sursa (job #858202) | Cod sursa (job #288828) | Cod sursa (job #1921951)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int N, K, sum, maxim = 0;
vector <int> v;
void Read(){
int nr;
in >> N >> K;
for(int i = 1; i <= N; ++i){
in >> nr;
sum += nr;
if(nr > maxim)
maxim = nr;
v.push_back(nr);
}
}
bool Works(int n){
int transport_curent = 0;
int transport = 0;
int s = v.size();
for(int i = 0; i < s; ++i){
if(transport_curent + v[i] > n || i == s - 1){
transport++;
transport_curent = v[i];
}
else
transport_curent += v[i];
}
if(transport <= K)
return 1;
return 0;
}
void BinarySearch(){
int left = maxim, right = sum;
int mid, sol = sum;
while(left <= right){
mid = (left + right) / 2;
if(Works(mid)){
sol = mid;
right = mid - 1;
}
else
left = mid + 1;
}
out << sol << "\n";
}
int main(){
Read();
BinarySearch();
return 0;
}