Cod sursa(job #1699976)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 9 mai 2016 00:12:09
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

using namespace std;

int N,K,v[16001]={},Min=0,Max=0,Mid,M,val;
int sim(int size)
{
	int pos=1,sum,moves=0;
	while(pos<=N)
	{
		sum=0;
		while(sum+v[pos]<=size&&pos<=N)
		{
			sum+=v[pos];
			pos++;
		}
		moves++;
	}
	if(moves>K)
		return 2;
	else if(moves<K)
		return 1;
	else
		return 0;
}
int main()
{
	freopen ("transport.in","r",stdin);
	freopen ("transport.out","w",stdout);

	scanf("%d%d",&N,&K);
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&v[i]);
		Max+=v[i];
		if(v[i]>Min)
			Min=v[i];
	}
	while(Min<Max)
	{
		Mid=(Min+Max)/2;
		val=sim(Mid);
		if(val==0)
		{
			M=Mid;
			Max=Mid;
		}
		else if (val==1)
		{
			M=Mid;
			Max=Mid-1;
		}
		else
			Min=Mid+1;
	}
	if(sim(M)==0)
	{
		while(sim(M)==0)
			M--;
		M++;
	}
	else
		M--;
	printf("%d",M);
	return 0;
}