Cod sursa(job #521397)

Utilizator popacamilpopa camil popacamil Data 12 ianuarie 2011 14:03:56
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n,k,i,maxim,st,dr,mij,sol;
long long int s;
int f(int x,vector<int>v){
	int y=0;
	long long int sx=0;
	for(i=1;i<=n;++i){
		if(sx+v[i]<=x){
			sx+=v[i];
		}
		else{
			sx=0;
			++y;
			sx+=v[i];
		}
		if(i==n && sx!=0)
			++y;
	}
	return y;
}
int main(){
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d",&n,&k);
	vector<int>v(n+2);
	for(i=1;i<=n;++i){
		scanf("%d",&v[i]);
		if(maxim<v[i]){
			maxim=v[i];
		}
		s+=v[i];
	}
	st=maxim;
	dr=s;
	if(f(st,v)<=k){
		printf("%d",st);
	}
	else{
		while(st<dr){
			mij=(st+dr)/2;
			if(f(mij,v)<=k){
				sol=mij;
			}
			dr=mij;
		}
	}
	printf("%d",sol);
	return 0;
}