Cod sursa(job #1483849)

Utilizator Athena99Anghel Anca Athena99 Data 9 septembrie 2015 23:49:06
Problema Progresii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

ifstream fin("progresii.in");
ofstream fout("progresii.out");

typedef long long i64;

const int nmax= 100000;

i64 p[nmax+1];

int main(  ) {
    i64 n, m, k, l, sum= 0;
    fin>>n>>m>>k>>l;
    for ( i64 i= 1; i<=n; ++i ) {
        fin>>p[i];
        p[i]= l-p[i];
        sum= sum+p[i]/m;
    }
    k-= n;

    if ( sum>k ) {
        fout<<"-1\n";
    } else {
        i64 m2;
        for ( m2= 1; m2*2<=m; m2*= 2 ) ;
        for ( i64 i= 1; i<=n; ++i ) {
            int sol= m;
            for ( i64 step= m2; step>0; step/= 2 ) {
                if ( sol-step>=1 && p[i]/(sol-step)<=k-sum ) {
                    sol-= step;
                }
            }

            k= k-p[i]/sol;
            sum= sum-p[i]/m;
            fout<<sol<<"\n";
        }
    }

    return 0;
}