Cod sursa(job #2793713)

Utilizator db_123Balaban David db_123 Data 3 noiembrie 2021 21:59:39
Problema Transport Scor 40
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");

#define ull unsigned long long

const int DIM=16002;

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

int nrTransport(int capacitate){
    ull s=v[0];
    int nr=1;
    for(int i=1;i<n;i++){
        if(s+v[i]<=capacitate){ /// can we take another box ?
            s+=v[i];
        }
        else{
            s=v[i]; /// reset
            nr++;
        }
    }
    return nr;
}

int main()
{
    int maxSaltea=0,sol=99999,result;
    ull sumTotalSaltea=0;
    int left,right,mid;
    cin>>n>>k;

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

    left =  maxSaltea;
    right = sumTotalSaltea;

    while(left<=right)
    {
        mid = (left+right)/2;
        result =  nrTransport(mid);
        if(result>k)
        {
            left=mid +1;
        }
        else if (result < k)
        {
            right = mid-1;
        }
        else
        {
            sol =  min(sol,mid);
            right= mid-1 ; /// check a smaller capacity
        }
    }
    cout<<sol;
    return 0;
}