Cod sursa(job #129157)

Utilizator pishtymatei silviu pishty Data 28 ianuarie 2008 18:19:03
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>   
#include <vector>   
using namespace std;   
  
#define in "transport.in"   
#define out "transport.out"   
#define dim 16001   
  
int N, K, C;   
int A[dim];   
  
bool Ok(int);   
  
int main()   
{   
    freopen(in,"r",stdin);   
    freopen(out,"w",stdout);   
       
    scanf("%d%d", &N, &K);   
    for ( int i = 1; i <= N; i++ )   
        scanf("%d", &A[i]);   
       
    int st, dr, mij;   
       
    st = 1, dr = 256000001;   
       
    while ( st <= dr )   
    {   
        mij = (st+dr)>>1;   
           
        if ( Ok(mij) ) C = mij, dr = mij-1;   
        else           st = mij + 1;   
    }   
       
    printf("%d", C);   
}   
  
bool Ok(int C)   
{   
    int last = 0, T = 1;   
       
    for ( int i = 1; i <= N; i++ )   
    {   
        if ( A[i] > C ) return 0;   
           
        if ( last + A[i] > C ) T += 1, last = A[i];   
        else last += A[i];   
           
        if ( T > K ) return 0;   
    }   
  
    if ( T <= K ) return 1;   
    return 0;   
}