Cod sursa(job #2876973)

Utilizator TheodorVladParaschiv Theodor Vlad TheodorVlad Data 23 martie 2022 22:50:00
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>
using namespace std;

int check (int n, int k, int v[], int w) {
    int count = 1;
    int i = 0, s = 0;
    while (i < n) {
        if (v[i] > w)
            return 0;
        if (v[i] + s <= w) {
            s = s + v[i];
            i++;
        } else {
            s = 0;
            count++;
        }
    }
    if (count <= k)
        return 1;
    return 0;
}

int main() {
    int n, k;
    ifstream infile; 
    infile.open("transport.in");
    ofstream outfile;
    outfile.open("transport.out");
    infile>>n;
    infile>>k;
    int v[n];
    int maxim = 0;
    int minim = 1000000000;
    for (int i = 0; i < n; i++) {
        infile>>v[i];
        maxim = maxim + v[i];
        if (minim > v[i]) {
            minim = v[i];
        }
    }
    int left = minim, right = maxim, middle = (left + right) / 2;
    while (right - left > 1) {
        middle = (left + right) / 2;
        if (check(n, k, v, middle)) {
            right = middle;
        } else {
            left = middle;
        }
    }
    outfile<<right;
    return 0;
}