Cod sursa(job #438338)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 10 aprilie 2010 18:00:11
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>

int v[16001];
int n, i, j, k;
int trans;
long int S;
int stanga, dreapta, mijl;

int Transport_It (int m)
{
	int suma = 16000000, trans = 0;
	for (i=1; i<=n; ++i)
	{
		if (suma + v[i] > m && v[i] <= m)
		{
			trans ++;
			suma = v[i];
		}
		else
			if (suma + v[i] <= m)
				suma += v[i];
		if (v[i] > m)
			return 0;
		if (trans > k)
			return 0;
	}
	return 1;
}

int main ()
{
	FILE *f = fopen ("transport.in","r");
	FILE *g = fopen ("transport.out","w");
	
	fscanf (f,"%d %d", &n, &k);
	for (i=1; i<=n; ++i)
	{
		fscanf (f,"%d", &v[i]);
		S += v[i];
	}
	fclose(f);
	
	stanga = 1;
	dreapta = S;
	while (stanga <= dreapta)
	{
		mijl = (stanga + dreapta) / 2;
		if (Transport_It(mijl))
			dreapta = mijl - 1;
		else
			stanga = mijl + 1;
	}
	
	fprintf (g,"%d", stanga);
	
	fclose(g);
	return 0;
}