Cod sursa(job #482194)

Utilizator CossAlbulescu Cosmina Coss Data 2 septembrie 2010 19:38:20
Problema Transport Scor 100
Compilator cpp 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;
}