Cod sursa(job #1525422)

Utilizator backtrackIconaru Marian Catalin backtrack Data 15 noiembrie 2015 00:45:01
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<iostream>
#include<fstream>
using namespace std;

int main(){
	ifstream f("transport.in");
	int n,k;
	f>>n>>k;
	int v[16000];
	int upper_bound;
	for(int i=0;i<n;i++){
		f>>v[i];
		upper_bound=max(upper_bound,v[i]);
	}
	int solution=upper_bound*n;
	int lower_bound=upper_bound;
	upper_bound*=n;
	
	while(lower_bound-upper_bound<=0){
		int i;
		int sum=(lower_bound+upper_bound)/2;
	    int nrtr=k;
		for(i=0;i<n;i++)
			if(sum-v[i]<0 && nrtr>0){
				sum=(lower_bound+upper_bound)/2;
				nrtr--;
				sum-=v[i];
			}
			else if(sum-v[i]<=0 && nrtr==0){
				lower_bound= (lower_bound+upper_bound)/2+1;
				break;
			}
			else if(sum-v[i]>=0) sum-=v[i];
		if(i==n && nrtr>0 && sum>=0)
			solution=min(solution,(lower_bound+upper_bound)/2);
		if(i==n && (nrtr!=0 || sum!=0))
			upper_bound=(lower_bound+upper_bound)/2-1;
		
	}
	ofstream g("transport.out");
	g<<solution;
	f.close();
	g.close();
	//system("pause");
	return 0;
	}