Cod sursa(job #1259323)

Utilizator EfrimoviciEfrim Razvan Efrimovici Data 9 noiembrie 2014 22:18:23
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<fstream>
using namespace std;
int main ()
{
  ifstream fin ("transport.in");
  ofstream fout ("transport.out");
  int n,k;
  fin>>n>>k;
  int a[n],sum=0,m,maxim=0,nr;
  for(int i=1;i<=n;i++)
  {
    fin>>a[i];
    sum+=a[i];
    if(a[i]>=maxim)
    maxim=a[i];
  }
  m=sum/k;
  int stanga=max(maxim,m);
  int dreapta=sum;
  int mij=(stanga+dreapta)/2;
  int salt,drum;
  while(stanga<=dreapta)
    {
        drum=1;
        salt=0;
        for(int i=1;i<=n;i++)
        {
            if(salt+a[i]>=mij)
            {
                drum++;
                salt=a[i];
            }
            else
                salt+=a[i];
        }
        if(drum>k)
                  stanga=mij+1;
        else
            {
             nr=mij;
             dreapta=mij-1;
            }
        mij=(stanga+dreapta)/2;
    }
    fout<<nr;
}