Cod sursa(job #2890582)

Utilizator LIR16LazarIonutRadu LIR16 Data 15 aprilie 2022 23:22:15
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <climits>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

int n, k;
int v[16001];
int ans;

bool verificare(int x)
{
    int sum = 0;
    int num_drumuri = 0;
    for (int i = 0; i < n; i++)
    {
        sum += v[i];
        if (sum > x)
        {
            sum = v[i];
            num_drumuri++;
        }
    }

    if (sum > 0)
        num_drumuri++;

    if (num_drumuri <= k)
        return true;
    return false;
}

int cautare_binara(int dr)
{
    int st = 1, mid, rasp = dr + 1;

    while (st <= dr)
    {
        mid = dr - ((dr - st) >> 1);

        if (verificare(mid)) {
            dr = mid - 1;
            rasp = mid;
        }
        else
        {
            st = mid + 1;
        }
    }

    return rasp;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("transport.in", "r");
    fout = fopen("transport.out", "w");

    fscanf(fin, "%d %d", &n, &k);

    for (int i = 0; i < n; i++) {
        fscanf(fin, "%d", &v[i]);
    }

    fprintf(fout, "%d", cautare_binara(INT_MAX));

    fclose(fin);
    fclose(fout);
    return 0;
}