Cod sursa(job #2079551)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 1 decembrie 2017 15:33:23
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>

using namespace std;

int v[16000];
int n;

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

int main() {
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int c,st,dr,mid,k,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;
    mid = ( dr + st ) / 2;
    int min = s + 1;
    while( st < dr ) {
      c = verif(mid);
      if( c > k )
        st = mid;
      else if( c < k ) {
        dr = mid;
        if( mid < min )
          min = mid;
      }
      else if( c == k )
        break;
      mid = ( st + dr ) / 2;
    }
    if( min < mid )
      printf("%d",min);
    else
      printf("%d",mid);
    return 0;
}