Cod sursa(job #438315)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 10 aprilie 2010 17:42:54
Problema Transport Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>

int v[16001];
int n, i, j, k;
int trans;
long int Max, s;

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]);
		if (v[i] > Max)
			Max = v[i];
	}
	fclose(f);
	
	trans = 0;
	i = 1;
	while (i <= n)
	{
		if (s + v[i] <= Max)
			s += v[i];
		else
		{
			s = 0;
			trans ++;
			continue;
		}
		i ++;
	}
	if (s)
		trans ++;
	
	if (trans <= k)
	{
		while (1)
		{
			Max --;
			s = trans = 0;
			i = 1;
			while (i <= n)
			{
				if (v[i] > Max)
				{
					trans = 100;
					break;
				}
				if (s + v[i] <= Max)
					s += v[i];
				else
				{
					s = 0;
					trans ++;
					continue;
				}
				i ++;
			}
			if (s)
				trans ++;
			if (trans > k)
			{
				Max ++;
				break;
			}
		}
	}
	else
	{
		while (1)
		{
			Max ++;
			s = trans = 0;
			i = 1;
			while (i <= n)
			{
				if (s + v[i] <= Max)
					s += v[i];
				else
				{
					s = 0;
					trans ++;
					continue;
				}
				i ++;
			}
			if (s)
				trans ++;
			if (trans <= k)
				break;
		}
	}
	
	fprintf (g,"%ld", Max);
	
	fclose(g);
	return 0;
}