Cod sursa(job #1671080)

Utilizator mircearoataMircea Roata Palade mircearoata Data 1 aprilie 2016 12:03:26
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n,k,v[16005],i;
int transport(int m)
{
    int i,t,nr;
    i=1;
    t=m;
    nr=k;
    while(i<=n && nr>0)
    {
        if(v[i]<=t)
        {
            t=t-v[i];
            i=i+1;
        }
        else
        {
            nr=nr-1;
            t=m;
        }

    }
    if(i>n)
        return 1;
    else
        return 0;

}
int cautareBinara(int s, int d)
{
    int m;
    while(s<=d)
    {
        m=s+(d-s)/2;
        if(transport(m)==1)
        {
            if(m==s)
                return m;
            else
            {
                if(transport(m-1)==0)
                    return m;
                else
                    d=m-1;
            }
        }
        else
            s=m+1;
    }

}
int main()
{
    long long sum;
    int ma,r;
    in>>n>>k;
    sum=0;
    ma=0;
    for(i=1; i<=n; i++)
    {
        in>>v[i];
        sum+=v[i];
        if(v[i]>ma)
            ma=v[i];

    }
    r=cautareBinara(ma,sum);
    out<<r;


    return 0;
}