Cod sursa(job #742458)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 30 aprilie 2012 12:15:03
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<iostream>
#include<fstream>
using namespace std;
int v[16001],n,k;
inline int camioane(int c)
{
	int s,i,nr;
	s=0;
	nr=1;
	for(i=1;i<=n;i++) {
		if((s+v[i])<=c)
			s=s+v[i];
		else {
			nr++;
			s=v[i];
		}
	}
	return nr;
}
inline int cautarebinara()
{
	int p,q,min,nr,mij,i;
	p=2000000000;
	q=0;
	for(i=1;i<=n;i++) {
		if(v[i]<p)
			p=v[i];
		q=q+v[i];
	}
	min=2000000000;
	if(n<=100) {
		for(i=p;i<=q;i++) {
			nr=camioane(i);
			if((nr<=k)&&(i<min))
				min=i;
		}
		return min;
	}
	while(p<=q) {
		mij=p+(q-p)/2;
		nr=camioane(mij);
		if(nr>k) 
			p=mij+1;
		else if(nr<=k) {
			min=mij;
			q=mij-1;
		}
	}
	return min;
}
int main ()
{
	int i;
	ifstream f("transport.in");
	ofstream g("transport.out");
	f>>n>>k;
	while(n<200);
	for(i=1;i<=n;i++)
		f>>v[i];
	f.close();
	g<<cautarebinara();
	g.close();
	return 0;
}