Cod sursa(job #2340853)

Utilizator cyg_alexandru546Zob Alexandru Mihai cyg_alexandru546 Data 11 februarie 2019 10:09:52
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
using namespace std;
const int NMAX=16000;
int v[NMAX+5];
int n,k;
bool ok(int C)
{
	int tr,i,sc;
	tr=0;
	sc=0;
	for(i=1;i<=n;i++)
	{
		if(v[i]>C)
			return 0;
		if(sc+v[i]<=C)
			sc=sc+v[i];
		else
			{
				sc=v[i];
				tr++;
			}
	}
	if(sc>0)
		tr++;
	return tr<=k;
}
int bs_left(int st,int dr)
{
	int med,last=-1;
	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;
			smax=0;
			scanf("%d%d",&n,&k);
			for(i=1;i<=n;i++)
			{
				scanf("%d",&v[i]);
				smax=smax+v[i];
			}
			printf("%d",bs_left(1,smax));
			return 0;
}