Cod sursa(job #2667092)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 2 noiembrie 2020 20:31:40
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;
int n, k, maxi, sum, a[16005];
bool verif(int p)
{
    int trans = 0, i = 1, l = 0;
    while(trans <= k && i <= n){
        l = 0;
        while(l <= p && i <= n){
            l += a[i++];
        }
        trans ++;
    }
    if (i == n+1){
        return true;
    }
    return false;
}
void caut(int st, int dr)
{
    int mijloc;
    while(dr - st > 1){
        mijloc = (st + dr)/2;
        if (verif(mijloc)){
            dr = mijloc;
        }else{
            st = mijloc;
        }
    }
    if (verif(dr)){
        printf("%d", dr);
    }
}
int main() {
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    scanf("%d%d", &n, &k);
    for (int i=1;i<=n;i++){
        scanf("%d", &a[i]);
        maxi = max(maxi, a[i]);
        sum += a[i];
    }

    caut(maxi, sum);
    return 0;
}