Cod sursa(job #851108)

Utilizator stoicatheoFlirk Navok stoicatheo Data 9 ianuarie 2013 15:55:47
Problema Progresii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
using namespace std;
 
ifstream in("progresii.in");
ofstream out("progresii.out");
 
long long n,v,l,d,sl;
long long pi[100100],sol[100100];
int main()
{
    in>>n>>v>>l>>d;
    for(int i=1;i<=n;++i)
    {
        in>>pi[i];
        sol[i]=v;
        sl+=(d-pi[i])/v+1;
    }
 
    if(sl-l>0)
    {
        out<<"-1";
        return 0;
    }
    else
    for(int i=1;i<=n;++i)
    {
        long long nr=sol[i],cnt=(1LL<<32);
        sl-=(d-pi[i])/v+1;
        for(;cnt>0;cnt>>=1)
            if(nr-cnt>0)
                if(sl+(d-pi[i])/(nr-cnt)+1<=l) nr-=cnt;
 
        sl+=(d-pi[i])/nr+1;
        /*if(sl>l)
        {
            out<<"-1";
        }*/
        sol[i]=nr;
    }
 
    for(int i=1;i<=n;++i)
        out<<sol[i]<<'\n';
 
    out.close();
    return 0;
}