Cod sursa(job #312447)

Utilizator klamathixMihai Calancea klamathix Data 6 mai 2009 08:39:58
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<cstdio>

#define MAXN 16100

int Sum , i , j , N , max ,  K , A[MAXN];

int test( int x )
{
    int transport = 0 , turn = 0;
    
    for( i =1 ; i <= N ;)
    {
         transport = 0;
         
         while (transport + A[i] <= x )
         {
               transport += A[i];
               i++;
         }
         
         turn ++;
    }

if ( turn <= K ) return 1;

return 0;
}

int search(int left , int right)
{
     int last = left , mid ;

     for( ; left <= right ;)
     {
      mid = ( left + right ) / 2;
     
      if( test ( mid ) ) 
      {
       last = mid;
       right = mid - 1;
      }
     
     else left = mid + 1;
     }

return last;

}
         
int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    
    scanf("%d %d",&N ,&K);
    
    for( i = 1 ; i <= N ; i ++)
         {
             scanf("%d",&A[i]);
             Sum += A[i];
             
             if ( A[i] > max ) max = A[i];
         }         
    
         
printf("%d\n",search(max, Sum));

return 0;
}