Cod sursa(job #494865)

Utilizator ooctavTuchila Octavian ooctav Data 23 octombrie 2010 11:25:29
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<cstdio>
#include<iostream>
using namespace std;

const int NMAX = 100005;

int N, K;
int A[NMAX];
long long maxim;
int REZ;
void citire()
{
	scanf("%d%d", &K, &N);
	for(int i = 1 ; i <= N ; i++)
	{
		scanf("%d", &A[i]);
		maxim += (long long)A[i];
	}
	maxim /= K;
}

bool ok(int x)
{
	long long total = 0;
	for(int i = 1 ; i <= N ; i++)
		total += min(A[i], x);
	return (total >= (long long)x * K);
}

void caut_bin()
{
	int P;
	for(P = 1 ; P<<1 <= maxim ; P <<= 1);
	for(; P ; P >>= 1)
		if(ok(REZ + P))
			REZ += P;
}

void scrie()
{
	printf("%d\n", REZ);
}

int main()
{
	freopen("grupuri.in", "r", stdin);
	freopen("grupuri.out", "w", stdout);
	citire();
	caut_bin();
	scrie();
	return 0;
}