Cod sursa(job #2157581)

Utilizator cyg_CiuntuSorinCiuntu Sorin Andrei cyg_CiuntuSorin Data 9 martie 2018 18:57:36
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>

using namespace std;
int n,k,i,s,v[16005],st,dr,med,l,tr,s2,last;

int ok()
{
  s2=tr=0;
  for(i=1;i<=n;i++)
  {
    if(v[i]>med)
      return 2000000000;
    if(s2+v[i]<=med)
      s2+=v[i];
    else
    {
      s2=v[i];
      tr++;
    }
  }
  if(s2)
    tr++;
  return tr;
}
int cb()
{
  st=1;
  dr=s;
  while(st<=dr)
  {
    med=(st+dr)/2;
    if(ok()<=k)
    {
      last=med;
      dr=med-1;
    }
    else
      st=med+1;
  }
  return last;
}
int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
      scanf("%d",&v[i]);
      s+=v[i];
    }
    printf("%d",cb());
    return 0;
}