Cod sursa(job #610188)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 25 august 2011 15:20:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<cstdio>
#include<fstream>
#include<iostream>
using namespace std;
int n,k,v[16005];
int maxim,sum,sol;

int Verificare(int x)
{
	int i,nr=1,suma=0;
	for(i=1;i<=n;i++)
	{
		if(suma+v[i]>x)
		{
			nr++;
			suma=v[i];
		}
		else
			suma+=v[i];
	}
	if(nr<=k)
		return 1;
	return 0;
}

int CautareBinara()
{
	int st,dr,m;
	st=maxim;
	dr=sum;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(Verificare(m)==1 && ((m>maxim && Verificare(m-1)==0) || m==maxim))
			return m;
		else
			if(Verificare(m)==1)
				dr=m-1;
			else
				st=m+1;
	}
	return 3.14;
}

int main()
{
	int i;
	fstream f,g;
	f.open("transport.in",ios::in);
	g.open("transport.out",ios::out);
	f>>n>>k;
	for(i=1;i<=n;i++)
	{
		f>>v[i];
		if (v[i]>maxim)
			maxim=v[i];
		
		sum+=v[i];
	}
	sol=CautareBinara();
	
	g<<sol;
}