Cod sursa(job #438324)

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

int v[16001];
int n, i, j, k;
int trans;
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);
	
	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)
			{
				fprintf (g,"%d",Max ++);
				return 0;
			}
		}
	}
	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)
			{
				fprintf (g,"%d",Max);
				return 0;
			}
		}
	}
	
	fclose(g);
	return 0;
}