Cod sursa(job #864223)

Utilizator alexandrabadutBadut Alexandra alexandrabadut Data 24 ianuarie 2013 19:46:30
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<fstream>
using namespace std;
int s,n,k,S,p,u,nr_transporturi,v[16001],i,maxim,m,nr;
ifstream fin("transport.in");
ofstream fout("transport.out");
int main(){
	fin>>n>>k;
	for(i=1;i<=n;i++){
		fin>>v[i];
		if(v[i]>maxim){
			maxim=v[i];
		}
		s=s+v[i];
	}
	p=maxim;
	u=s;
	while(p<=u){
		m=(p+u)/2;
		S=0;
		nr_transporturi=1;
		for(i=1;i<=n;i++){
			if(S+v[i]<=m){
				S=S+v[i];
			}
			else{
				S=v[i]; //salteaua care nu a incaput in transportul precedent
				nr_transporturi++;
			}
		}
		if(nr_transporturi<=k){
			u=m-1;;
		}
		else 
			p=m+1;
		if(nr_transporturi==k){
			nr=m;
		}
	}
	if(nr_transporturi!=k)
		nr=0;
	fout<<nr;
	return 0;
}