Cod sursa(job #2512141)

Utilizator Mc_TaviMacovei Octavian-Cosmin Mc_Tavi Data 20 decembrie 2019 16:43:14
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda simulare_1_oji_prep Marime 1.45 kb
#include <bits/stdc++.h>

using namespace std;
FILE *in, *out;

int N, K, volum_total;
deque<int> saltele;

bool verificare(int volum) {
    deque<int> temp_saltele = saltele;
    int nr_transporturi = 0;
    while(!temp_saltele.empty()) {
        ++nr_transporturi;
        int volum_curent = 0;
        while(volum_curent < volum && !temp_saltele.empty()) {
            volum_curent += temp_saltele.front();
            if(temp_saltele.front() > volum)
                return 1;
            if(volum_curent <= volum)
                temp_saltele.pop_front();
        }
    }
    if(nr_transporturi > K)
        return 1;
    if(nr_transporturi <= K)
        return 0;
}

int main()
{
    ///CITIRE
    in = fopen("transport.in","r");
    fscanf(in,"%d%d", &N, &K);
    for(int i = 1; i <= N; ++i) {
        int temp;
        fscanf(in,"%d", &temp);
        volum_total += temp;
        saltele.push_back(temp);
    }
    fclose(in);

    ///CAUTARE BINARA IN [1, volum_total]
    int st = 1, dr = volum_total, mid, sol = -1;
    while(st <= dr) {
        mid = (st+dr)/2;
        int temp_verif = verificare(mid);
        if(temp_verif == 1) {
            st = mid+1;
            continue;
        }
        else {
            sol = mid;
            dr = mid-1;
            continue;
        }
    }

    ///AFISARE
    out = fopen("transport.out","w");
    fprintf(out,"%d", sol);
    fclose(out);
    return 0;
}