Cod sursa(job #984497)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 14 august 2013 17:14:37
Problema Progresii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
 
#define maxdim 100005
 
FILE*f=fopen("progresii.in","r");
FILE*g=fopen("progresii.out","w");
 
int n,m;
int p[maxdim];
long long k,l;
long long needed[maxdim];
 
int main () {
     
    fscanf(f,"%d %d %lld %lld",&n,&m,&k,&l);
    for ( int i = 1 ; i <= n ; ++i ){
        fscanf(f,"%d",&p[i]);
    }
     
    for ( int i = n ; i >= 1 ; --i ){
        needed[i] = needed[i+1] + (l-p[i])/m + 1;
    }
     
    if ( needed[1] > k ){
        fprintf(g,"-1\n");
        fclose(f); fclose(g);
        return 0;
    }
     
    for ( int i = 1 ; i <= n ; ++i ){
         
        int left = 1,middle,right = m;
        while ( left <= right ){
            middle = left + ((right-left)>>1);
             
            if ( (l-p[i])/middle+1+needed[i+1] <= k ){
                right = middle-1;
            }
            else{
                left = middle+1;
            }
        }
        fprintf(g,"%d\n",left);
         
        k -= ((l-p[i])/left + 1);
    }
     
    fclose(f);
    fclose(g);
     
    return 0;
}