Cod sursa(job #487099)

Utilizator ChallengeMurtaza Alexandru Challenge Data 23 septembrie 2010 19:50:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 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 nrk=0;
	int a;
	for(register int i=0;i<n;)
	{
		if(v[i]>m)
		{
			return false;
		}
		a=0;
		while(a+v[i]<=m && i<n)
		{
			a+=v[i];
			++i;
		}
		++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();

	is_good(4);

	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;
}