Cod sursa(job #1034674)

Utilizator PatrunjelFMIAnita Liviu Patrunjel Data 17 noiembrie 2013 23:28:06
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<iostream>
#include<fstream>
#include<climits>
using namespace std;

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

bool test(long long capacitate,unsigned short saltele[], unsigned short N, unsigned short K){
    unsigned short i;
    int s=0,transporturi=0;

    for(i=0;i<N;i++){
        if(s+saltele[i] <= capacitate)  s+=saltele[i];
        else{
            s=saltele[i];
            transporturi++;
        }
        if(saltele[i]>capacitate) return 0;
    }
    if(s)   transporturi ++;

    return transporturi<=K && transporturi;
}

int main(){
    unsigned short saltele[16000],N,K; //32kb
    long long li,ls,s=0,i,m;

    fin>>N>>K;
    for(i=0;i<N;i++){
        fin>>saltele[i];
        s+=saltele[i];
    }

    li=1;ls=s;
    while(li<ls && test(ls-1,saltele,N,K)){
        m=(li+ls)/2;
        if(test(m,saltele,N,K)) //pentru volum m se incadreaza
            ls=m;
        else    li=m;   //folosesc camioane prea mici
    }

    cout<<li+1<<endl;

    return 0;
}