Cod sursa(job #1021447)

Utilizator BuseSorinFMI Buse Sorin-Marian BuseSorin Data 3 noiembrie 2013 20:22:02
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<iostream>
#include<fstream>
using namespace std;
int verifica(int saltele[],int n,int max,int k){
	int i=0, l = 0;
	while (i<n){
		int c = max;

		while (saltele[i] <= c&&i<n){
			c -= saltele[i];
			i++;
		}
		l++;
	}
	if (l < k){
		return 0;
	}
	else if (l>k){
		return -1;
	}
	return 1;
}
int cauta(int saltele[],int n, int k,int stanga, int dreapta){
	while (stanga <= dreapta){
		int mij = dreapta - (dreapta - stanga) / 2;
		int p = verifica(saltele, n, mij, k);
		if (p==0){
			dreapta = mij - 1;
		}
		else{
			if (p == -1){
				stanga = mij + 1;
			}
			else{
				return mij;
			}
		}
	}
}
int main(){
	ifstream f("transport.in");
	int n = 0, k = 0;
	f >> n >> k;
	int saltele[16000];
	int max = 0, s = 0;
	for (int i = 0; i < n; i++){
		f>>saltele[i];
		s += saltele[i];
		if (saltele[i]>max){
			max = saltele[i];
		}
	}
	ofstream o("transport.out");
	if (verifica(saltele, n, max, k)==1){
		o<< max;
	}
	else{
		o << cauta(saltele, n, k, max, s);
	}
	
	return 0;
}