Cod sursa(job #769169)

Utilizator MtkMarianHagrSnaf MtkMarian Data 18 iulie 2012 15:24:21
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<iostream>
#include<fstream>
using namespace std;
int n,k,*v;
int verific (int m)
{
	int cont=0,sum=0;
	int j=1;
	sum=v[j];
	//cout<<m<<" m"<<endl ;
	while(j<n)
	{
		//cout<<sum<<" sum "<<endl;
		if((sum+v[j+1])<=m)
		{
			
			sum=sum+v[j+1];
			
			j++;
		}
		else 
		{
			
			cont++;
			//cout<<" cont  " <<cont<<endl;
			j++;
			sum=v[j];
		}
		
	}
	cont++;
	//cout<<"cont  "<<cont<<endl;
	return cont;


}

int cauta(int inf,int sup)
{
	int m,a;
	while(inf<=sup)
	{
	m=(sup+inf)/2;
	a=verific(m);
	if(a>=k)inf=m+1;
	else sup=m-1;
	//cout<<" m inf sup "<<m<<" "<<inf<<" "<<sup<<endl;
	}
	m=(sup+inf)/2;
	a=verific(m);
	while(a==k)
	{
		m--;
		a=verific(m);
	}
		return m+1;
}

int main()
{
	ifstream f("transport.in");
	ofstream g("transport.out");
	int max=0,sum=0,capacitate=0;
	bool ok=false;
	f>>n>>k;
	v=new int[n+2];

	for(int i=1;i<=n;i++)
	{
		f>>v[i];
		//cout<<v[i]<<" ";
		if(v[i]>max)max=v[i];
		sum=sum+v[i];
	}
	
	//cout<<endl<<max<<" "<<"sum"<<" "<<sum<<endl;

	capacitate=cauta(max,sum);
	g<<capacitate<<endl;
	//system("pause");
	return 0;
}