Cod sursa(job #1268878)

Utilizator rusuraresRares Rusu rusurares Data 21 noiembrie 2014 16:46:03
Problema Transport Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#include <stdlib.h>
int n,k;
int v[16000];
int bs(int st, int dr)
{
	int med,last=dr+1;
	while(st<dr)
	{
		med=(st+dr)/2;
		if(ok(med))
		{
			last=med;
			dr=med-1;
		}
		else
		{
			st=med+1;
		}
	}
	return last;
}
int ok(int c)
{
	int tr,s,i;
	tr=s=0;
	for(i=0;i<n;i++)
	{
		if(v[i]>c)
		return 0;
		s=s+v[i];
		if(s>c)
		{
			tr++;
			s=v[i];
		}
	}
	if(s>0)
		tr++;
	return tr<=k;
}
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	int i,s;
	scanf("%d%d",&n,&k);
	s=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&v[i]);
		s=s+v[i];
	}
	printf("%d",bs(1,s));
    return 0;
}