Cod sursa(job #487091)

Utilizator ChallengeMurtaza Alexandru Challenge Data 23 septembrie 2010 19:21:35
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>

using namespace std;

const char InFile[]="transport.in";
const char OutFile[]="transport.out";
const int MaxN=16010;

ifstream fin(InFile);
ofstream fout(OutFile);

int v[MaxN],n,k,u,p,m,sol;

bool is_good(int m)
{
	int i=0;
	int nrk=1;
	int a=0;
	while(i<n)
	{
		if(a+v[i]>m)
		{
			a=0;
			++nrk;
		}
		a+=v[i];
		++i;
	}
	if(a==0)
	{
		--nrk;
	}
	return nrk<=k;
}

int main()
{
	fin>>n>>k;
	p=MaxN;
	for(register int i=0;i<n;++i)
	{
		fin>>v[i];
		u+=v[i];
	}
	fin.close();
	p=0;
	while(p<=u)
	{
		m=p+(u-p)/2;
		if(is_good(m))
		{
			sol=m;
			u=m-1;
		}
		else
		{
			p=m+1;
		}
	}

	fout<<sol;
	fout.close();
	return 0;
}