Cod sursa(job #1229602)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 17 septembrie 2014 20:01:40
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");

int n,k,v[20000],sol;

int nr_transport(int capacitate)
{

    int suma = 0,i = 1,sol = 0;
    while(i <= n )
    {

        if(suma + v[i] > capacitate)
        {
            sol++;
            suma = v[i];
        }
        else{
            suma+=v[i];
        }
        i++;
    }
    sol++;
    return sol;
}

void bin_search(int left,int right,int val)
{

    int mid,now;
    while(left <= right)
    {

        mid = (left+right)/2;
        now = nr_transport(mid);
        if(now <= val){
            right = mid -1;
            sol = mid;
        }
        else
            left = mid +1 ;
    }
}

int main()
{

    in>>n>>k;
    int s = 0;
    for(int i = 1 ; i <= n ; i++){
        in>>v[i];
        s+= v[i];
    }
    if(k == 1 )
    {
        out<<s;
        return 0;
    }
    if(n == 1){
        out<<v[1];
        return 0;
    }
    bin_search(1,s,k);
    out<<sol;
    in.close();
    out.close();
    return 0;
}