Cod sursa(job #1522673)

Utilizator ArambasaVlad Arambasa Arambasa Data 11 noiembrie 2015 21:43:37
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 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 MAX;
int Verificat(int capmax)
{
    int drumuri = K;
  int capacitateMax = capmax;
  for(int i = 0; i < N; i++)
    if(capacitateMax >= V[i])
      capacitateMax -= V[i];
    else
    {
      drumuri--;
      capacitateMax = capmax - V[i];
    }
    return (drumuri >= 0);
}
int caut_bin (int st, int dr)
{
    //cout<<st<<' '<<dr<<' '<<M<<'\n';
    if (dr-1<=st)
    {
        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],MAX=V[i];
    }
    //cout<<M<<'\n';
    M=caut_bin(M,N*M);
}
void Write()
{
    out<<M;
}
int main()
{
    Read();
    Solve();
    Write();
    return 0;
}