Cod sursa(job #1522668)

Utilizator ArambasaVlad Arambasa Arambasa Data 11 noiembrie 2015 21:38:51
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int N,K;
int V[16000];
int M;
int Verificat(int capmax)
{
    int drumuri = 0;
    //int capacitateMax = capmax;
    int load=0;
    for (int i=0;i<N;i++)
    {
        load+=V[i];
        if (load==capmax)
            load=0,drumuri++;
        else if (load>capmax)
            load=0,drumuri++,i--;
    }
    return (drumuri<=K);
}
int caut_bin (int st, int dr)
{
    cout<<st<<' '<<dr<<' '<<M<<'\n';
    if (st+1>=dr)
    {
        if (Verificat(dr))
            return dr;
        return st;
    }
    int mid=(st+dr)/2;
    if (Verificat(mid))
        return caut_bin(st, mid);
    return caut_bin(mid,dr);
}
void Read()
{
    in>>N>>K;
    for (int i=0;i<N;i++)
    {
        in>>V[i];
    }
}
void Solve()
{
    M=-2000000;
    for (int i=0;i<N;i++)
    {
        if (M<V[i])
            M=V[i];
    }
    //cout<<M<<'\n';
    M=caut_bin(M,N*N);
}
void Write()
{
    out<<M;
}
int main()
{
    Read();
    Solve();
    Write();
    //cout<<Verificat(8);
    return 0;
}