Cod sursa(job #2280545)

Utilizator ValentinSavoiuFMI Savoiu Valentin-Marian ValentinSavoiu Data 10 noiembrie 2018 20:08:07
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream> // reimplementare pentru lab ASD
#include <algorithm>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int i, A[16001], N, mask, Max, sum, K;
int check (long long x) {
    int i = 0, sum = 0, sol = 1;
    while (i <= N) {
        if (A[i] > x) return K + 1;
        if (A[i] + sum > x) {
            sum = A[i];
            ++sol;
        }
        else {
            sum = sum + A[i];
        }
        ++i;
    }
    return sol;
}
int cautbin (int x) {
    int left = 1, right = Max, mid, val;
    while (right >= left) {
        mid = left + (right - left) / 2;
        val = check(mid);
        if (val <= x) right = mid - 1;
        else left = mid + 1;
    }
    return left;
}
int main() {
    f >> N >> K;
    sum = 0;
    for (i = 1; i <= N; i++) {
        f >> A[i];
        sum += A[i];
    }
    Max = sum;
    mask = 1;
    while (mask <= Max)
        mask <<= 1;
    mask >>= 1;
    g << cautbin(K);
    return 0;
}