Cod sursa(job #2596049)

Utilizator GligarEsterabadeyan Hadi Gligar Data 9 aprilie 2020 09:46:01
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>

using namespace std;

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

const int nmax=16000;

int v[nmax+1];

int n,k;

bool fct(int x){
    int c=0,s=0;
    for(int i=1;i<=n;++i){
        s-=v[i];
        if(s<0){
            s=x-v[i];
            ++c;
        }
    }
    return c<=k;
}

int main(){
    fin>>n>>k;
    int a=0,b=0;
    for(int i=1;i<=n;++i){
        fin>>v[i];
        b+=v[i];
        if(a<v[i]){
            a=v[i];
        }
    }
    int b2=1;
    while(b2<=b){
        b2*=2;
    }
    b2/=2;
    int sol=b+1;
    for(int i=b2;i>0;i/=2){
        if(sol-i>=a&&fct(sol-i)==1){
            sol-=i;
        }
    }
    fout<<sol<<"\n";
    return 0;
}