Cod sursa(job #973938)

Utilizator marius135Dumitran Adrian Marius marius135 Data 16 iulie 2013 01:20:41
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
// cautam binar cate grupuri formam


#include<iostream>
#include<algorithm>

using namespace std;

#define maxn 100001

int N, K;
int val[maxn];


int ok( long long value) {
	long long sum = 0;
	for( int i = 0; i < N; ++i)
		sum += min( (long long )val[i], value);
	return sum  >= value * K;
	
}

int main() {
	
	freopen("grupuri.in", "r", stdin);
	freopen("grupuri.out", "w", stdout);
	
	
	cin>>K>>N;

	long long sum = 0;;
	
	
	
	for( int i = 0; i < N; ++i) {
		cin>>val[i];
		sum += val[i];
	}
	
	long long maxim = sum/K;
	
	long long test = 1;
	while( test <= maxim )
		test *= 2;
	test /= 2;
	
	long long actual = 0;
	//ok(5);
	while( test ) {
		if( actual + test <= maxim && ok( actual + test ) ) 
			actual += test;
		test /= 2;
	}
	cout<<actual<<endl;
	
}