Pagini recente » Cod sursa (job #2396962) | Cod sursa (job #2179165) | Cod sursa (job #2701582) | Cod sursa (job #824402) | Cod sursa (job #1779522)
#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;
}
}
void scrie(int x)
{
char aux,i,j,t=-1,a[16];
while(x) { a[++t] = x%10+'0'; x/=10; }
a[t+1] = NULL;
for(i = 0, j = t; i < j; ++i,--j)
{
aux = a[i];
a[i] = a[j];
a[j] = aux;
}
puts(a);
}
int main(){
freopen("progresii.in","r",stdin);
freopen("progresii.out","w",stdout);
int i,N,M,f;
ll K,L,all=0,st,dr,mid;
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;
for(st = 1, dr = M; st <= dr;)
{
mid = (st+dr)>>1;
if( all + (L-p[i])/mid <= K ) { f = mid; dr = mid-1; }
else st = mid+1;
}
v[i] = f;
all = all + (L-p[i])/f;
}
for(i = 1; i <= N; ++i) scrie(v[i]);
return 0;
}