Cod sursa(job #520848)

Utilizator DraStiKDragos Oprica DraStiK Data 10 ianuarie 2011 17:10:02
Problema Progresii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <algorithm>
using namespace std;

#define DIM 100005

long long v[DIM],sum[DIM];
long long n,m,k,l;

void read ()
{
    long long i;

    scanf ("%lld%lld%lld%lld",&n,&m,&k,&l);
    for (i=1; i<=n; ++i)
        scanf ("%lld",&v[i]);
}

long long cbin (long long start,long long lim)
{
    long long st,dr,mij,sol;

    for (st=1, dr=sol=m; st<=dr; )
    {
        mij=(st+dr)/2;
        if ((l-start)/mij+1<=lim)
        {
            sol=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }

    return sol;
}

void solve ()
{
    long long i,nr;

    for (i=n; i>=1; --i)
        sum[i]=sum[i+1]+(l-v[i])/m+1;
    if (k<sum[1])
    {
        printf ("-1");
        return ;
    }
    for (i=1; i<=n; ++i)
    {
        nr=cbin (v[i],k-sum[i+1]);
        printf ("%lld\n",nr);
        k-=(l-v[i])/nr+1;
    }
}

int main ()
{
    freopen ("progresii.in","r",stdin);
    freopen ("progresii.out","w",stdout);

    read ();
    solve ();

    return 0;
}