Cod sursa(job #3236703)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 30 iunie 2024 16:16:35
Problema Transport Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

const int MAX_N = 16005;
int n, k;
int v[MAX_N];

bool Check(int q) {
    int checks = 0;
    int currSum = 0;
    for (int i = 0; i < n - 1; i++) {
        currSum += v[i];
        if (currSum > q) {
            checks++;
            currSum = v[i];
        }
        else if (currSum == q) {
            checks++;
            currSum = 0;
        }
    }

    currSum += v[n - 1];
    if (currSum > q) {
        checks += 2;
    }
    else {
        checks++;
    }

    if (checks <= k) {
        return true;
    }
     return false;
}

int BinSearch() {
    int lf = 1;
    int rg = 16005;
    int bestAns = MAX_N;

    while (lf <= rg) {
        int mid = lf + (rg - lf) / 2;

        if (Check(mid)) {
            rg = mid - 1;
            bestAns = mid;
        }
        else {
            lf = mid + 1;
        }
    }

    return bestAns;
}

int main() {
    fin >> n >> k;
    
    for (int i = 0; i < n; i++) {
        fin >> v[i];
    }

    fout << BinSearch();

    return 0;
}