Cod sursa(job #799602)

Utilizator Detrol2kGuianu Leon Detrol2k Data 19 octombrie 2012 16:03:56
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
using namespace std;

int n, k, x, v[17000];

int ok(int middle)
{
	int i, nr=1, s=v[1];

	for(i=2;i<=n;i++)
		if(s+v[i] <= middle)
			s += v[i];
		else
		{
			s = v[i];
			nr++;
		}
	return nr<=k;
}

int binary_search(int left, int right)
{
	int middle, last;
	
	while(left <= right)
	{
		middle = (left+right)/2;
		if(ok(middle))
		{
			last = middle;
			right = middle-1;
		}
		else
			left = middle+1;
	}
	return last;
}

int main()
{
	FILE *f=fopen("transport.in", "r");
	FILE *g=fopen("transport.out", "w");
	
	int i, s=0, max=0;
	
	//Read
	fscanf(f, "%d %d", &n, &k);
	for(i=1; i<=n; i++)
	{
		fscanf(f, "%d", &v[i]);
		s += v[i];
		if(v[i] > max)
			max = v[i];
	}
	
	//Print
	fprintf(g, "%d", binary_search(max,s));
}