Cod sursa(job #390909)

Utilizator ErgoVicol Sergiu Constantin Ergo Data 4 februarie 2010 19:34:31
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

#define NMAX 16020

using namespace std;

int N, K, A[NMAX];
long long  Sol = 16000*16000;


void Citeste(void)
{
	ifstream fin("transport.in");
	
	int i;
	
	fin >>N >>K;
	
	for (i = 1; i <= N; i++)
		fin >>A[i];
	
	fin.close();
}

int nrCamioane(long long m)
{
	int i, nc = 0, Gre = 0;

	for (i = 1; i <= N; i++)
	{
		Gre += A[i];
		if (Gre > m) 
			nc++, Gre = A[i];
	}
	
	nc++;
	
	return nc;
}

void CautaRez(void)
{
	long long st = 1, end = 16000*16000, m;
	int nc;
	
	while (st <= end)
	{
		m = (st + end) / 2;
		
		nc = nrCamioane(m);
		
		if (nc <= K && m < Sol) Sol = m, end = m - 1;
		if (nc > K) st = m + 1;
	}
}

void Afiseaza(void)
{
	ofstream fout("transport.out");
	
	fout <<Sol;
	
	fout.close();
}
int main()
{
	Citeste();
	
	CautaRez();
	
	Afiseaza();
	
	return 0;	
}