Cod sursa(job #211375)

Utilizator raula_sanChis Raoul raula_san Data 1 octombrie 2008 21:17:09
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

int N, K, Sum;
vector <int> V;

int oK(int capacity)
{
	vector <int> :: iterator it;
	
	int t = 1, s = 0;
	for ( it = V.begin(); it != V.end(); ++it )
	{
		if(*it > capacity) return 0;
		
		if(s + *it <= capacity)
			s += *it;
		else
		{
			s = *it;
			++ t;
		}
		
		if(t > K) return 0;
	}
	
	return 1;
}

void ReadData()
{
	freopen("transport.in", "rt", stdin);
	
	int x, i;
	for ( scanf("%d %d", &N, &K), i = 1; i <= N; ++i )
	{
		scanf("%d", &x); Sum += x;
		V.push_back(x);
	}
	
	fclose(stdin);
}

int Solve()
{
	int step = 1 << 30, i;
		
	for ( i = 0; step; step>>=1 )
		if( !oK(i + step) ) i += step;
		
	return i;
}

int main()
{
	ReadData();
	
	freopen("transport.out", "wt", stdout);
	
	printf("%d", Solve() + 1);

	fclose(stdout);
	return 0;
}