Pagini recente » Cod sursa (job #2651415) | Cod sursa (job #3233786) | Cod sursa (job #303276) | Cod sursa (job #3166673) | Cod sursa (job #428287)
Cod sursa(job #428287)
#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);}