Cod sursa(job #428287)

Utilizator mihaismolenskiMihai Smolenski mihaismolenski Data 29 martie 2010 09:17:16
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#define INFILE "grupuri.in"
#define OUTFILE "grupuri.out"
FILE * fin=fopen (INFILE, "rt");
FILE * fout=fopen (OUTFILE, "wt");

void citire ();
void binara ();
void afisare ();
int verificare (long long int x);
int k, n, v[100001];
long long int MAX;
long long int s[100001];

int main ()
{

citire ();
binara ();
afisare ();

fclose(fin);
fclose(fout);
return 0;
}

void citire ()
	{
	int i;
	fscanf(fin, "%d %d\n", &k, &n);
	for (i=1; i<=n; i++)
		{fscanf(fin, "%d", &v[i]);
		s[i]=s[i-1]+v[i];}
	}

void binara ()
	{
	long long int st=1, dr=100000000, mij;
	while (st<=dr)
		{
		mij=(st+dr)/2;
		if (verificare(mij))
			st=mij+1;
			else
			dr=mij-1;
		}
	}

int verificare (long long int x)
	{
	long long int nr=x*k;
	int i=n;
	//vedem care au un numar >= cu k
	while (v[i]>=x)
		{nr-=x; i--;}
	if (nr<=s[i])
		{if (x>MAX) MAX=x;
		return 1;}
	return 0;
	}

void afisare ()
	{fprintf(fout, "%lld\n", MAX);}