Cod sursa(job #3200619)

Utilizator RaresStanStan Rares RaresStan Data 5 februarie 2024 13:21:29
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<bits/stdc++.h>

using namespace std;
int s, v[16005], k;

bool f(int x) {
    if (x * k < s)
        return false;
    return true;
}

int main() {
    ifstream cin("transport.in");
    ofstream cout("transport.out");
    int n;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
        s += v[i];
    }
    int st = 1, dr = s, r = 0;
    while (st <= dr) {
        int mid = (st + dr) / 2;
        if (f(mid)) {
            int sn = 0, t = 0;
            bool ok = true;
            for (int i = 1; i <= n; i++) {
                sn += v[i];
                if (sn > mid) {
                    if (i == n) {
                        t++;
                        ok = false;
                        break;
                    }
                    sn = 0;
                    i--;
                    t++;
                } else if (sn == mid) {
                    sn = 0;
                    t++;
                } else if (i == n && sn < mid)
                    t++;
            }
            if (t == k && ok) {
                r = mid;
                dr = mid - 1;
            } else if (t == k && !ok)
                st = mid + 1;
            else if (t != k)
                dr = mid - 1;
        } else
            st = mid + 1;
    }
    cout << r;
    return 0;
}