Cod sursa(job #1732062)

Utilizator aurasslamMihai Aurelian aurasslam Data 20 iulie 2016 18:03:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
using namespace std;
int v[16001], N, k, x;
int corect(int cap)
{
	int sum=0, tran=0;
	for(int i=1; i<=N; i++)
	{
		sum+=v[i];
		if(sum>cap)
		{
			tran++;
			sum=v[i];
		}
		
	}
	if(tran<k && cap>=sum)
		return 1;
	return 0;
}
int main()
{
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	cin>>N>>k;
	int MAX=0, s=0, sol;
	for(int i=1;i<=N;i++)
	{
		cin>>x;
		v[i]=x;
		if(MAX<x)
			MAX=x;
		s+=x;
	}
	int ls=MAX, ld=s;
	/*for (int i = ls; i <= ld; i++) {
		if (corect(i)) {
			sol = i;
			break;
		}
	}*/ //solutia greoaie
	while(ls<=ld)
	{
		int mid=(ls+ld)/2;
		if(corect(mid))
		{
			ld=mid-1;
			sol=mid;
		} else {
			ls=mid+1;
		}
			
		
	}
	cout<<sol;
	return 0;
}