Pagini recente » Cod sursa (job #1001415) | Profil dornescuvlad | Cod sursa (job #883514) | Monitorul de evaluare | Cod sursa (job #3154540)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int N_MAX = 16000;
int mat_num;
int mats[N_MAX + 1];
int trips;
bool check(int size){
int trips_made = 0;
int sum = 0;
for(int i = 1; i <= mat_num; ++i){
sum += mats[i];
if(sum > size){
++trips_made;
sum = 0;
--i;
}else if(sum == size){
++trips_made;
sum = 0;
}
}
if(sum < size && sum != 0){
++trips_made;
sum = 0;
}
return trips_made <= trips && sum == 0;
}
int main(){
fin >> mat_num >> trips;
int maxm = 0, mat_sum = 0;
for(int i = 1; i <= mat_num; ++i){
fin >> mats[i];
maxm = max(maxm, mats[i]);
mat_sum += mats[i];
}
int st = maxm, dr = mat_sum;
while(st < dr){
int mid = (st + dr) / 2;
if(check(mid)){
//cout << mid << ' ' << 1 << '\n';
dr = mid;
}else {
//cout << mid << ' ' << 0 << '\n';
st = mid + 1;
}
}
fout << dr;
return 0;
}