Cod sursa(job #521423)

Utilizator popacamilpopa camil popacamil Data 12 ianuarie 2011 14:44:16
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
long long int s,n,k,i,maxim,sol,st,dr,mij;
int f(int x,vector<int>v){
	int y=1;
	long long int sx=0;
	for(i=1;i<=n;++i){
		if(sx+v[i]<=x){
			sx+=v[i];
		}
		else{
			++y;
			sx=v[i];
			
		}
	}
	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("%lld",st);
	}
	else{
		while(st<=dr){
			mij=st+(dr-st)/2;
			if(f(mij,v)<=k){
				dr=mij-1;
			}
			else{
				st=mij+1;
			}
		}
	printf("%lld",st);
	}
	
	return 0;
}