Cod sursa(job #1880620)

Utilizator igroitaGroita Igor igroita Data 15 februarie 2017 20:42:35
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>

using namespace std;

ifstream cin("transport.in");
ofstream cout("transport.out");
int n, k;
long long cmax = 256000000LL, v[16005];
bool check(long long rs){
	long long sum=0;
	int trans=1;
	for(int i=1; i<=n && trans<=k+2; ++i){
			if(rs-sum>=v[i]){ sum+=v[i]; }
		else{ ++trans; sum = v[i];
			if(rs<v[i]) return 0;
			}
	}
	if(trans>k) return 0;
	else return 1;
}

long long caut(long long inc, long long sf){
	long long mid = (inc + sf) / 2;
	if(sf<=inc) return mid; 
	if(check(mid)){
			cout<<mid<<"\n";
		caut(inc, mid);}
	else{
		cout<<mid<<'\n';
	 	caut(mid+1,sf);}
}

int main(){
	cin>>n>>k;
	if(k>n) k=n;
	
	for(int i=1; i<=n; ++i) cin>>v[i];
//	cout<<'\n';
//	for(int i=1; i<=n; ++i) cout<<v[i]<<"   ";
	
	cout<<caut(0, cmax);
	
	
	
		
	return 0;
}