Cod sursa(job #799599)

Utilizator Detrol2kGuianu Leon Detrol2k Data 19 octombrie 2012 15:54:23
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
using namespace std;

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

int is_too_big(int middle)
{
	int i=1, bag=0, nr=0;
	
	for(i=1; i<=n; i++)
	{
		bag += v[i];
		if(bag > middle)
		{
			nr++;
			bag = 0;
			bag += v[i];
		}
		if(nr >= k)
			return 0;
	}
	return 1;
}

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

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));
}