Pagini recente » Cod sursa (job #2096372) | Cod sursa (job #885028) | Cod sursa (job #230040) | Cod sursa (job #1528892) | Cod sursa (job #3134729)
//Ilie Dumitru
#include<cstdio>
const int NMAX=100005;
int N, K;
int v[NMAX];
bool doable(long long nrGrp)
{
long long left=nrGrp;
int i, nrCmpl=0;
for(i=N-1;i>-1 && nrCmpl<K;--i)
{
if(v[i]>=nrGrp)
++nrCmpl;
else if(left>v[i])
left-=v[i];
else
++nrCmpl, left=nrGrp-(v[i]-left);
}
return nrCmpl==K;
}
int main()
{
FILE* f=fopen("grupuri.in", "r"), *g=fopen("grupuri.out", "w");
//FILE* f=stdin, *g=stdout;
int i;
long long l, r=0, mid;
fscanf(f, "%d%d", &K, &N);
for(i=0;i<N;++i)
fscanf(f, "%d", v+i), r+=v[i];
l=v[N-K];
r=r/K+1;
while(r-l>1)
{
mid=l+((r-l)>>1);
if(doable(mid))
l=mid;
else
r=mid;
}
fprintf(g, "%lld", l);
fclose(f);
fclose(g);
return 0;
}