Cod sursa(job #279343)

Utilizator Addy.Adrian Draghici Addy. Data 12 martie 2009 19:45:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define DIM 16001

int S[DIM];
int i,n,k,c,maxS,sumS,p,u,sol;

  FILE *f = fopen("transport.in", "r");
  FILE *g = fopen("transport.out", "w");

int verif(int c) {
  int nt, tc;

  nt = 1;
  tc = 0;

  for (i=1; i<=n; i++) {
    if (tc + S[i] <= c)
      tc += S[i];
    else {
      tc = S[i];
      nt++;
    }
  }

  if (nt <= k)
    return 1;
  else
    return 0;
}

int main(){

  fscanf(f,"%d %d",&n,&k);

  for (i=1; i<=n; i++) {
    fscanf(f,"%d",&S[i]);
    if (S[i] > maxS)
      maxS = S[i];
    sumS += S[i];
  }

  p = maxS;
  u = sumS;

  while (p<=u) {
    c = p + (u-p)/2;

    if (verif(c)) {
      sol = c;
      u = c-1;
    }
    else
      p = c+1;
  }

  fprintf(g,"%d",sol);

  fclose(f);
  fclose(g);

  return 0;
}