Cod sursa(job #430116)

Utilizator dacyanMujdar Dacian dacyan Data 30 martie 2010 19:18:12
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#define INF 16001
using namespace std;

long long n, k(INF), T;
int a[INF];

ofstream fout("transport.out");
void Read();
void Write();
void Solve();
bool Verif(long s);

int main()
{
	Read();
	Solve();
	Write();
	return 0;
}

void Read()
{
	ifstream fin("transport.in");
	fin >> n >> T;
	for ( int i = 1; i <= n; i++)
		fin >> a[i];
	fin.close();
}

void Solve()
{
	int i, mij;
	int st = 0, dr = INF;
	
	
	while ( st <= dr)
	{
		mij = (st + dr) / 2;
		if ( Verif(mij))
		{
			//if ( k > mij) 
			k = mij;
			dr = mij - 1;
		}
		else
			st = mij + 1;
	}
}

bool Verif(long s)
{
	int i = 1, t = 1, k1 = 0;
	while ( i <= n)
	{
		if ( a[i] + k1 <= s)
			k1 += a[i];
		else
		{
			t++; k1 = a[i]; //transport nou
			
			if ( t > T) return false;
		}
		i++;
	}
	
	return true;
}

void Write()
{
	//ofstream fout("transport.out");
	if ( k ) fout << k << '\n';
	else fout << 1 << '\n';
	fout.close();
}