Cod sursa(job #2340842)

Utilizator chiravladChira Vlad chiravlad Data 11 februarie 2019 10:02:11
Problema Transport Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
const int NMAX = 16000;
int v[NMAX + 5];
int n,k;
bool ok(int C)
{
	int tr,i,sc;
	tr=sc=0;
	for(i=1; i<=n; i++)
		{
			if(v[i]>C) return 0;

			if(sc+v[i]<=C) sc+=v[i];
			else
				{
					tr++;
					sc=v[i];
				}
		}
	if(sc>0) tr++;

	return (tr<=k);
}


int binarySearch_left(int st, int dr)
{
	int med,last=0;
	while(st<=dr)
		{
			med = st + (dr-st)/2;
			if(ok(med))
				{
					last = med;
					dr=med-1;
				}
			else st+=med+1;
		}

	return last;
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	int i,smax;
	scanf("%d%d",&n,&k);
	for(i=1; i<=n; i++)
		{
			scanf("%d",&v[i]);
			smax+=v[i];
		}
	printf("%d",binarySearch_left(1,smax));
	return 0;
}