Cod sursa(job #1007476)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 8 octombrie 2013 22:42:18
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#define nmax 16001

using namespace std;

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

int n,k,maxim=0,hi,lo,i,num,mid,vol,middle;
int v[nmax];
bool ok;

int main(){
    
    in >> n >> k;
    
    for (i=1; i<=n; i++){
        in >> v[i];
        lo=max(v[i], lo);
        hi+=v[i];
    }
    
    while (hi-lo>1){
        mid=(hi+lo)>>1;
        
        num=0;
        vol=0;
    
        for (i=n; i>0; i--){
            
            if (vol<mid && vol+v[i]<=mid) vol+=v[i];
            else num++, vol=v[i];
            
            if (i==1) num++;
        
            if (num>k) break;
        }
        
        if (num>k){
            lo=mid;
        } else {
            if (num<=k) hi=mid, maxim=mid;
            else lo=mid;
        }
    }
    
    out << maxim;
    
    return 0;
}