Cod sursa(job #2667804)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 3 noiembrie 2020 21:11:59
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;
int n, k, maxi, sum, a[16005];
bool verif(int p)
{
    int trans = 1, 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 (st < dr) {
        mijloc = (st + dr) / 2;
        if (verif(mijloc)) {
            dr = mijloc;
        } else {
            st = mijloc + 1;
        }
    }
    if (verif(st)) {
        printf("%d", st+1);
    }
}
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;
}