Cod sursa(job #71187)

Utilizator crawlerPuni Andrei Paul crawler Data 9 iulie 2007 17:50:10
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>

using namespace std;

#define Nmax 100001

int v[Nmax], N, K;
long long Max;

int bun(long long m);

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

	long long lo,hi,m;

	scanf("%d%d",&K,&N);
	
	for (int i=1;i<=N;++i)
	{
       	scanf("%d",&v[i]);
       	Max += v[i];
	}

	Max /= K; ++Max;   
	lo=1; hi=Max+1;
	while (lo<=hi)
	{
		m=(lo+hi)/2;
		if (bun(m)==0)
			hi=m-1;
		else
			lo=m+1;	
	}	

	printf("%lld\n",hi);
	
	return 0;
}

int bun(long long m)
{
	//deci vreau sa fac m grupuri de K animale ... big deal ...
	int tmp = 0;
	long long poz = 1;

	for (int i=1;i<=N;++i)
	if (v[i] >= m)	++tmp;
		else
	{
		poz += v[i];
		if (poz > m) poz -= m, ++tmp;
	}		
	
	if (tmp >= K) return 1;
	return 0;
}