Cod sursa(job #119883)

Utilizator CezarMocanCezar Mocan CezarMocan Data 3 ianuarie 2008 16:36:24
Problema Grupuri Scor 74
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 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 (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;   
}