Cod sursa(job #655968)

Utilizator rendorzegAndrei Pavel rendorzeg Data 3 ianuarie 2012 17:47:00
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<fstream.h>
#define nmax 16005
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k;
int v[nmax],maxs;
long s,w;


void read(){
	int i;
	fin>>n>>k;
	maxs=0;
	for (i=1;i<=n;i++)
	{
		fin>>v[i];
		if (v[i]>maxs)
			maxs=v[i];
		s+=v[i];
	}	
}

int rez(long m)
{
	int i,p;
	long u;
	u=0;
	p=0;
	for (i=1;i<=n;i++)
	{
		if (u+v[i]>m)
		{
			p++;
			u=0;
		}
		u+=v[i];		
	}
	if (u+v[i]<=m)
		return p+1;
	return p;
}

void cautbin(long st,long dr)
{
	long m;
	int p;
	if (st<=dr)
	{
		m=(st+dr)/2;
		p=rez(m);
		if (p<=k)
		{
			w=m;
			cautbin(st,m-1);
		}
		else cautbin(m+1,dr);			
	}
}

int main()
{
	read();
	cautbin(maxs,s);
	fout<<w;
	return 0;
}