Cod sursa(job #483019)

Utilizator avram_florinavram florin constantin avram_florin Data 6 septembrie 2010 15:43:09
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<fstream>
#include<algorithm>

using namespace std;

ifstream f ("transport.in");
ofstream g ("transport.out");
const int MaxN=16001;

int N,K,s[16001];
long C,S,max1;

int rezolv(long m)
{
	int i,nrt = 0;
	long t = 0;
	for( i = 1 ; i <= N ; i++ )
		{
			if( t + s[i] > m)
				{
					nrt++;
					t = 0;
				}
			t += s[i];
		}
	if( t + s[i] <= m)
		return nrt +1;
	return nrt;
}

void binary_search(int st, int dr)
{
	long m;
	int nrt;
	if( st <= dr)
		{
			m = (st + dr)/2;
			nrt = rezolv(m);
			if(nrt <= K)
				{
					C = m;
					binary_search(st,m-1);
				}
				else
				binary_search(m+1,dr);
		}
}

int main ()
{
	f >> N >> K;
	int i;
	for( i = 1 ; i <= N ; i++ )
		{
			f >> s[i];
			S += s[i];
			if( max1 < s[i])
				max1 = s[i];
		}
	binary_search(max1,S);
	g << C << '\n';
	f.close();
	g.close();
	return 0;
}