Cod sursa(job #119885)
Utilizator | Data | 3 ianuarie 2008 16:41:36 | |
---|---|---|---|
Problema | Grupuri | Scor | 74 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.54 kb |
#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;
}