Cod sursa(job #1967234)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 16 aprilie 2017 11:44:41
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <iostream>
#define MAX 16000

using namespace std;
int v[MAX];
int main()
{
  FILE *fin, *fout;
  int n, k, i, st, dr, mij, nrt, suma;

  fin = fopen("transport.in", "r");
  fout = fopen("transport.out", "w");
  fscanf(fin, "%d%d", &n, &k);
  st = dr = 0;
  for(i = 0; i < n; i++)
  {
    fscanf(fin, "%d", &v[i]);
    if(st < v[i])st = v[i];
    dr += v[i];
  }
  while(st <= dr)
  {
    mij = (st + dr) / 2;
    nrt = i = 0;
    while(i < n)
    {
      suma = 0;
      while(i < n && suma <= mij)
      {
        suma += v[i];
        i++;
      }
      if(suma > mij)
      {
        i--;
        suma -= v[i];
      }
      nrt++;
    }
    if(nrt <= k)dr = mij - 1;
    else st = mij + 1;
  }
  fprintf(fout, "%d", mij);
  fclose( fin );
  fclose( fout );
  return 0;
}