Cod sursa(job #1779565)

Utilizator silkMarin Dragos silk Data 15 octombrie 2016 14:01:19
Problema Progresii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#define NMax 100000
#define DIM 10000
#define ll long long
char buff[DIM];
int poz;

int p[NMax+1];
int v[NMax+1];

void citeste(int& numar)
{
    numar = 0;
    while(buff[poz]<'0'||buff[poz]>'9')
    if(++poz==DIM) fread(buff,1,DIM,stdin),poz=0;

    while(buff[poz]>='0'&&buff[poz]<='9')
    {
        numar = numar * 10 + buff[poz] - '0';
        if(++poz==DIM) fread(buff,1,DIM,stdin),poz=0;
    }
}

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

    int i,N,M,f;
    ll rest,K,L,all=0;

    scanf("%d %d %lld %lld",&N,&M,&K,&L);
    for(i = 1; i <= N; ++i)
    {
        citeste(p[i]);
        if( p[i] > L ) v[i] = 1;
        else
        {
            all = all + (L-p[i])/M;
            --K;
            v[i] = M;
            if( all > K ) { printf("-1\n"); return 0; }
        }
    }

    for(i = 1; i <= N; ++i)
    if( p[i] <= L )
    {
        all = all - (L-p[i])/M;
        rest = K-all;

        v[i] = (L-p[i])/(rest+1) + 1;

        all = all + (L-p[i])/v[i];
    }

    for(i = 1; i <= N; ++i) printf("%d\n",v[i]);



return 0;
}