Cod sursa(job #122475)

Utilizator cos_minBondane Cosmin cos_min Data 12 ianuarie 2008 15:37:45
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 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 = 1000000;
	
	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;
}