Cod sursa(job #1502098)

Utilizator justsomedudePalade Thomas-Emanuel justsomedude Data 14 octombrie 2015 10:17:52
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream fin ("transport.in");
ofstream fout ("transport.out");

int a[16005], n, k, Camion;

void Citire()
{
  fin >> n >> k;
  for (int i=1; i<=n; i++)
     fin >> a[i];
}

inline int Merge(int Camion)
{
    int cnt, i, s;

    s=0; cnt=0;

    for (i=1; i<=n; i++)
    {
        if (a[i] > Camion) return 0;
        if (s+a[i] <= Camion)
        {

            s += a[i];
        }
        else
        {
            cnt++;
            s = a[i];

        }
    }
    if (cnt > k) return 0;
    return 1;
}

void Rezolvare()
{
    int st, dr, m;
    st = 1; dr = 256000000;
    Camion = 256000000;
    while (st <= dr)
    {
        m = (st + dr) / 2;
        if (Merge(m))
        {
            Camion = m;
            dr = m - 1;
        }
        else st = m + 1;
    }
    Camion++;
    fout << Camion << "\n";

}

int main ()
{
  Citire();
  Rezolvare();
  fin.close();
  fout.close();
  return 0;
}