Cod sursa(job #2703958)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 9 februarie 2021 16:29:09
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, k;
int st[16000];

int nrTransporturi (int cap){
    int dim, transporturi;
    dim = 0;
    transporturi = 0 ;

    for(int i=0; i<n; i++){
        if(dim + st[i] > cap){
            transporturi++;
            dim = st[i];
        }
        else{ //stiu sigur ca st[i] incape intr-un transport din limitele cautarii binare
            dim += st[i];
        }
    }
    transporturi++;

    //cout<<"cap= "<<cap<<"\ntransporturi= "<<transporturi<<"\n\n";
    return transporturi;
}

int main()
{
    fin>>n>>k;

    int mn=0, suma=0, p, u, mij, sol;

    for(int i=0; i<n; i++){
        fin>>st[i];
        mn = max(mn, st[i]);
        suma += st[i];
    }

    //fac o cautare binara dupa rezultat
    p = mn;
    u = suma;
    while(p <= u){
        mij = (p + u) / 2;

        if ( nrTransporturi(mij) <= k ){
            sol = mij;
            u = mij - 1;
            //daca numarul de transporturi este mic, ii scad capacitatea, adica u = mij - 1, sa vad cu cate nr transporturi ramane acum
        }
        else{
            p = mij + 1;
        }
    }

    fout<<sol;
}