Cod sursa(job #2491804)

Utilizator sygAndreiIonitaIonita Andrei sygAndreiIonita Data 13 noiembrie 2019 10:06:59
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>

using namespace std;

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

int v[16001];
int n,k,max1;
long long sum;

bool verif (int cant)
{
  int sum=0,i,zile=1;
  for (i=1;i<=n;i++)
  {
    if (sum+v[i]<=cant)
        sum+=v[i];
    else if (v[i]>cant)
        return 0;
    else if (sum+v[i]>cant)
        zile++,sum=v[i];
  }
  if (zile<=k)
    return 1;
  return 0;
}

int cautare(int st,long long dr)
{
  int pos,mijl;
  while (st<=dr)
    {
      mijl=(st+dr)/2;
      if (verif(mijl)==1)
      {
        pos=mijl;
        dr=mijl-1;
      }
      else
        st=mijl+1;
    }
  return pos;
}

int main()
{
    in>>n>>k;
    for (int i=1;i<=n;i++)
       in>>v[i],sum+=v[i],max1=max(max1,v[i]);
    out<<cautare(max1,sum);
    return 0;
}