Cod sursa(job #2445364)

Utilizator AdryanR8iurian adrian razvan AdryanR8 Data 3 august 2019 19:10:39
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;

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

int Verif(int);
int BS(int, int);

int n,k,maxim=-1,total,capacity;
int saltele[16005];

int main(){
    in>>n>>k;
    for(int i=1;i<=n;++i){
        in>>saltele[i];
        if(maxim<saltele[i])
            maxim=saltele[i];
        total+=saltele[i];
    }
    saltele[n+1]=100000;
    capacity=maxim;
    //cout << maxim << " " << total << "\n";
    out << BS(maxim,total);
    return 0;
}

int Verif(int c){
    int cont=0,i=1;
    while(i<=n){
        int sum=0;
        while(1){
            if(sum+saltele[i]<=c)
                sum+=saltele[i++];
            else
                break;
        }
        ++cont;
    }
    if(cont==k)
        return 0;
    if(cont<k)
        return -1;
    if(cont>k)
        return 1;
}

int BS(int st,int dr){
    int mij,poz;
    while(st<=dr){
        mij=st+(dr-st)/2;
        int verif=Verif(mij);
        if(verif==0){
            poz=mij;
            dr=mij-1;
        }
        else{
            if(verif==1)
                st=mij+1;
            else
                dr=mij-1;
        }
    }
    return poz;
}