Cod sursa(job #3154077)

Utilizator RMTomaRican Mihai Toma RMToma Data 3 octombrie 2023 09:35:13
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#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;
    int sum = 0;
    if(cap < Max){
        return false;
    }
    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;
}