Cod sursa(job #1314253)

Utilizator radudorosRadu Doros radudoros Data 11 ianuarie 2015 17:36:37
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#define nmax 16001
using namespace std;



unsigned long long v[nmax];
int n;

bool verif(unsigned long long cap,int t)
{
	int poz = 0;
	for (int i = 1; i <= t;i++)
	{
		int j = poz;
		while (v[j] - v[poz]<=cap)
		{
			if (j == n)
				return 1;
			j++;
		}
		j--;
		poz = j;
	}
	return 0;
}

int cb(unsigned long long in, unsigned long long sf, int t)
{
	unsigned long long pow,pas, i;
	for ( pow = 1; pow <= sf - in + 1; pow <<= 1);
	for (pas = pow, i = sf + 1; pas; pas >>= 1)
	{ 
		if (i - pas >= in && verif(i - pas,t))
			i -= pas;
	}
	return i;
}


ifstream fin("transport.in");
ofstream fout("transport.out");

int main()
{
	
	int k;
	int x;
	int min = 0;
	fin >> n >> k;
	for (int i = 1; i <= n; i++)
	{
		fin >> x;
		v[i] += v[i - 1] + x;
		if (x > min)
		{
			min = x;
		}
	}
	fout << cb(min, v[n],k);
}