Cod sursa(job #2079572)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 1 decembrie 2017 15:56:48
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

using namespace std;

int v[16000];
int n,k;

int verif( int d ) {
  int i,s,t;
  s = 0;
  i = 1;
  t = 0;
  while( i <= n ) {
    while( s <= d && i <= n ) {
      s = s + v[i];
      i ++;
    }
    t ++;
    if( s > d )
      i --;
    s = 0;
  }
  if( t <= k )
    return 1;
  return 0;
}

int main() {
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int c,st,dr,mid,max,s,i;
    scanf("%d%d",&n,&k);
    max = s = 0;
    for( i = 1; i <= n; i ++ ) {
      scanf("%d",&v[i]);
      if( max < v[i] )
        max = v[i];
      s = s + v[i];
    }
    st = max;
    dr = s;
    int min = s + 1;
    mid = ( dr + st ) / 2;
    while( st <= dr ) {
      if( verif( mid ) == 1 ) {
        if( min > mid )
          min = mid;
        dr = mid-1;
      }
      else
        st = mid+1;
    mid = ( dr + st ) / 2;
    }
    printf("%d",min);
    return 0;
}