Cod sursa(job #3154540)

Utilizator rosca.crisRosca Cristian rosca.cris Data 4 octombrie 2023 23:26:54
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#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;
}