Pagini recente » Cod sursa (job #850504) | Cod sursa (job #2474223) | Cod sursa (job #902827) | Cod sursa (job #2354378) | Cod sursa (job #119885)
Cod sursa(job #119885)
#include <cstdio>
using namespace std;
long v[100100],x[100100],n,k,i,t,l,r,m,sum;
int marmota_este_ucisa(long c)
{
long i,s=0,j;
/* for (i=1;i<=n;i++)
x[i]=v[i];
j=n;
for (i=k;i>=1;i--)
{
s=0;
if (x[j]>=c)
j--;
else
{
while (s<c&&j>0)
{
if (s+x[j]>=c)
{
x[j]-=c-s;
s=c;
}
else
{
s+=x[j];
x[j]=0;
j--;
}
}
}
if (!j&&s<c)
return 0;
}
return 1; */
for (i=n;i>=1;i--)
{
if (v[i]>c)
s+=c;
else
s+=v[i];
if (s>=k*c)
i=0;
}
if (k*c<=s)
return 1;
else
return 0;
}
void cauta(long l,long r)
{
m=(l+r)/2;
if (marmota_este_ucisa(m))
{
t=m;
if (!marmota_este_ucisa(m+1))
return;
else
cauta(m+1,r);
}
else
{
cauta(l,m-1);
}
if (l>=r)
return;
}
int main(){
freopen("grupuri.in","r",stdin);
freopen("grupuri.out","w",stdout);
scanf("%d%d",&k,&n);
for (i=1;i<=n;i++)
{
scanf("%d",&v[i]);
sum+=v[i];
}
cauta(1,sum/k);
printf("%d",t);
return 0;
}