Cod sursa(job #2836608)

Utilizator andreea_chivuAndreea Chivu andreea_chivu Data 20 ianuarie 2022 17:27:27
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

const int REZ_MAX = 27e7;

int sp[16001];

int  verif(int c, int n, int maxi){
    if(c < maxi)
        return 2e4;
    int pa = 0;
    int nr = 0;
    for(int i = 1; i <= n; i++){
        int vol = sp[i] - sp[pa];
        if(vol > c){
           nr++;
           pa = i - 1;
           if(i == n){
                nr++;
           }
        }else if(vol == c){
            nr++;
            pa = i;
        }else if(i == n){
            nr++;
        }
    }
    return nr;
}


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

    int n, k;
    fin >> n >> k;
    int maxi = -1;
    for(int i = 1; i <= n; i++){
        fin >> sp[i];
        if(sp[i] > maxi)
            maxi = sp[i];
        sp[i] += sp[i - 1];
    }

    int st = 1, dr = REZ_MAX, rez = -1;
    while(st <= dr){
        int mij = (st + dr)/2;
        if(verif(mij, n, maxi)  <= k ){
            rez = mij;
            dr = mij - 1;
        }else{
            st = mij + 1;
        }
    }

    fout << rez;

    fin.close();
    fout.close();
    return 0;
}