Cod sursa(job #2792847)

Utilizator db_123Balaban David db_123 Data 2 noiembrie 2021 13:06:04
Problema Transport Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <climits>

using namespace std;

ifstream cin("transport.in");
ofstream cout("transport.out");

const int DIM=16002;

int n,k;
int v[DIM]={0};

int nrTransport(int capacitate){
    int s=v[0],nr=0;
    for(int i=1;i<n;i++){
        if(s+v[i]<=capacitate){
            s+=v[i];
        }
        else{
            s=v[i];
            nr++;
        }
    }
    return nr;
}

int main()
{
    int maxSaltea=INT_MIN;
    cin>>n>>k;

    for(int i=0;i<n;i++){
        cin>>v[i];
        maxSaltea=max(maxSaltea,v[i]);
    }

    int left=maxSaltea,right=256000,mid=0,a=0;
    int sol=0;

    ///solutie incorecta
    /*while(left<=right){
        mid=(right+left)/2;
        a=nrTransport(mid);
        if(a>k){
            right=mid-1; de ce?
        }
        else if(a<k){
            left=mid+1;
        }
        else if(a==k){
            sol=mid;
            right=mid-1;
        }
    }*/

    ///solutie corecta
    while(left<=right){
        mid=(left+right)/2;
        if(nrTransport(mid)>k-1){
            left=mid+1;
        }
        else{
            sol=mid;
            right=mid-1;
        }
    }

    cout<<sol;
    return 0;
}