// UVa 12390 - Distributing Ballot Boxes
#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
int a[500000];
int n, b;
bool possible(int m) {
	int tot = 0;
	for (int i = 0; i < n; i++) {
		int need = (a[i] / m) + (a[i] % m ? 1 : 0);
		tot += need;
	}
	return tot <= b;
}
int main() {
	while ((cin >> n >> b) && (n != -1 || b != -1)) {
		int fin = 0;
		for (int i = 0; i < n; i++) {
			scanf("%d", &a[i]);
			if (a[i] > fin)
				fin = a[i];
		}
		int sol = 0;
		int ini = 1;
		while (ini <= fin) {
			int mid = (ini + fin) >> 1;
			if (possible(mid)) {
				sol = mid;
				fin = mid - 1;
			} else
				ini = mid + 1;
		}
		cout << sol << endl;
	}
	return 0;
}
Saturday, May 16, 2015
UVa 12390 - Distributing Ballot Boxes
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment