Cod sursa(job #1200067)

Utilizator hrazvanHarsan Razvan hrazvan Data 21 iunie 2014 19:07:45
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#define MAXNK 16000
int v[MAXNK];

char bun(int nr, int n, int k){
  int i, sum = 0;
  for(i = 0; i < n; i++){
    if(nr < v[i]) return 0;
    if(sum + v[i] > nr){
      k--;
      sum = v[i];
    }
    else{
      sum += v[i];
    }
  }
  if(k < 0 || ( k == 0 && sum != 0 )) return 0;
  return 1;
}

int main(){
  FILE *in = fopen("transport.in", "r");
  int n, k;
  fscanf(in, "%d%d", &n, &k);
  int i;
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &v[i]);
  }
  fclose(in);
  int rez = 0, pas = 1 << 30;
  while(pas > 0){
    if(!bun(rez + pas, n, k))  rez += pas;
    pas /= 2;
  }
  FILE *out = fopen("transport.out", "w");
  fprintf(out, "%d", rez + 1);
  fclose(out);
  return 0;
}