Cod sursa(job #1005349)

Utilizator lucky1992Ion Ion lucky1992 Data 4 octombrie 2013 20:51:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <numeric> 
#define NMAX 17000

using namespace std;

int N, K, a[NMAX], lo, hi, mid, transport, capac;

int main(){

	freopen("transport.in", "r", stdin );
	freopen("transport.out", "w", stdout );
	
	scanf("%d%d", &N, &K );
	
	for( int i = 0; i < N; i++ )
		scanf("%d", &a[i] );
	
	lo = *max_element( a, a+N );
	hi = accumulate( a, a+N, 0 );
	
	while( lo <= hi ){
	
		mid = lo + (hi-lo)/2;
		transport = 1; capac = 0;
		
		for( int i = 0; i < N; i++ )
			if( capac + a[i] <= mid )
				capac += a[i];
			else{
				capac = a[i];
				transport++;
			}
		
		if( transport > K )
			lo = mid+1;
		else
			hi = mid-1;
			
	}
	
	printf("%d", hi+1);
	
	return 0;

}