Cod sursa(job #1000749)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 23 septembrie 2013 18:09:59
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <algorithm>

using namespace std;

int n,k,v[16005];

inline void Read()
{
    int i;
    ifstream fin("transport.in");
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin.close();
}

inline int Drumuri(int x)
{
    int i,nr=1,s=v[1];
    for(i=2;i<=n;i++)
    {
        s+=v[i];
        if(s>x)
        {
            nr++;
            s=v[i];
        }
    }
    return nr;
}

inline void Bsearch()
{
    int maxim,i,st,dr,mij,nr,sol;
    maxim=v[1];
    for(i=2;i<=n;i++)
        maxim=max(maxim,v[i]);

    st=1;dr=256000000;
    ofstream fout("transport.out");
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(mij<maxim)
            st=mij+1;
        else
        {
            nr=Drumuri(mij);
            if(nr<=k)
            {
                sol=mij;
                dr=mij-1;
            }
            else
                st=mij+1;
        }
    }
    fout<<sol<<"\n";
    fout.close();
}

int main()
{
    Read();
    Bsearch();
    return 0;
}