Cod sursa(job #589307)

Utilizator Smaug-Andrei C. Smaug- Data 11 mai 2011 20:12:38
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>

#define MAXN 16000

int trans(int *S, int N, int K, int c){
  
  int i, aux, t;

  aux=0; t=1;
  for(i=0; i<N; i++){
    if(aux+S[i]<=c)
      aux+=S[i];
    else {
      t++;
      aux=S[i];
    }
  }

  if(t<=K)
    return 0;
  else
    return t;

}

int bin(int l, int r, int *S, int N, int K){

  int mid;

  while(l<r){
    mid=((r-l)>>1)+l;
    if(!trans(S, N, K, mid))
      r=mid-1;
    else
      l=mid+1;
  }
  mid=((r-l)>>1)+l;

  if(!trans(S, N, K, mid))
    return mid;
  else
    return mid++;

}



int main(){

  freopen("transport.in", "r", stdin);
  freopen("transport.out", "w", stdout);

  int N, K, S[MAXN+10], i, max, sum, res;
  
  max=0; sum=0;
  scanf("%d%d", &N, &K);
  for(i=0; i<N; i++){
    scanf("%d", S+i);
    if(S[i]>max)
      max=S[i];
    sum+=S[i];
  }

  res=bin(max, sum, S, N, K);

  printf("%d\n", res);

  return 0;

}