Cod sursa(job #1338858)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 10 februarie 2015 14:28:41
Problema Progresii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>

#define NMAX 100007

long long Sum, x, n, m, k, l;
long long Ans[NMAX], poz[NMAX];
int main(){
    freopen("progresii.in","r",stdin);
    freopen("progresii.out","w",stdout);
    scanf("%lld %lld %lld %lld",&n, &m, &k, &l);
    for(int i = 1; i <= n; ++i)
        scanf("%lld", &poz[i]);
    Sum = 0;
    for(int i = 1; i <= n; ++i){
        Ans[i] = m;
        ++Sum;
        Sum += (l - poz[i]) / m;
    }
    if (Sum > k)
        printf("-1\n");
    else{
        for(int i = 1; i <= n; ++i){
            Sum -= ((l - poz[i]) / m + 1);
            x = k - Sum;
            if (l - poz[i] + 1 < x){
                x = l - poz[i] + 1;
                Ans[i] = 1;
            }
            else{
                Ans[i] = (l - poz[i] + 1) / x;
                if ((l - poz[i] + 1) % x != 0)
                    ++Ans[i];
                x = (l - poz[i] + 1) / Ans[i];
                if ((l - poz[i] + 1) % Ans[i] != 0)
                    ++x;
            }
            Sum += x;
        }
        for(int i = 1; i <= n; ++i)
            printf("%lld\n", Ans[i]);
    }
    return 0;
}