Cod sursa(job #634414)

Utilizator kis_lorikis levente lorand kis_lori Data 16 noiembrie 2011 11:33:30
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <iomanip>
#include <iostream>
#include <math.h>

using namespace std;

fstream fin("transport.in",ios::in);
fstream fout("transport.out",ios::out);

int main()
{
  int n,k,i,j,v[16010],maxim,kaux,sum,ok=0,smax=0,l;
  fin>>n>>k;
  for (i=1;i<=n;i++) {
    fin>>v[i];
    if (maxim<v[i]) maxim = v[i];
    smax+=v[i];
  }
  while (!ok){
    kaux = 0; sum = 0; ok=1; l=(maxim+smax)/2;
    for (j=1;j<=n;j++){
      if (sum+v[j]>l){
        sum=v[j]; kaux++;
        if (kaux>k){
          ok=0; break;
        }
      }else sum+=v[j];
    }
    // Cautare binara
    if ((ok)&&(maxim+1==smax)) fout<<l;
    else if (ok){
      smax=l; ok=0;
    }else{
      maxim=l+1;
    }       
  }
  fin.close(); fout.close();
  return 0;
}