Cod sursa(job #581038)

Utilizator SpiderManSimoiu Robert SpiderMan Data 13 aprilie 2011 18:24:55
Problema Progresii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
# include <cstdio>

typedef long long ll ;
const char *FIN = "progresii.in", *FOU = "progresii.out" ;

ll L, K, sol ;
int N, M, P[100005] ;

void cb ( ll X ) {
    ll cnt = 0, ii = 0 ;
    for ( cnt = 1 << 30, ii = 0; cnt ; cnt >>= 1 ) {
        if ( ii + cnt <= M && sol + X / (cnt + ii) >= K ) {
            ii += cnt ;
        }
    }
    sol += X / (cnt + ++ii) + 1 ;
    printf ( "%lld\n", ii ) ;
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;

    scanf ( "%d %d %lld %lld", &N, &M, &K, &L ) ;
    for ( int i = 1; i <= N; ++i ) {
        scanf ( "%d", P + i ) ;
        sol += (L - P[i]) / M + 1 ;
    }
    if ( sol - K > 0 ) {
        fprintf ( fopen ( FOU, "w" ) , "-1" ) ;
    } else {
        freopen ( FOU, "w", stdout ) ;
        for ( int i = 1; i <= N; ++i ) {
            sol -= (L - P[i]) / M + 1, cb ( L - P[i] ) ;
        }
    }
}