Pagini recente » Cod sursa (job #2889025) | Cod sursa (job #1204057) | Cod sursa (job #3237271) | Cod sursa (job #399078) | Cod sursa (job #165039)
Cod sursa(job #165039)
#include <iostream>
#define FIN "progresii.in"
#define FOUT "progresii.out"
#define MAX_N 100000
using namespace std;
typedef long long ll;
ll speed[MAX_N+1],pz[MAX_N+1];
ll n,m,k,l,total=0;
int decilitri(ll leng,ll viteza){
return (leng/viteza)+1;
}
void iofile(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d%d%d%d",&n,&m,&k,&l);
for (ll i=1;i<=n;i++){
scanf("%d",&pz[i]);
speed[i]=m;
total+=decilitri(l-pz[i],m);
}
fclose(stdin);
return ;
}
void binary_search(ll p,ll u,ll poz){
if (p<=u) {
ll mij=(p+u)/2;
if (total-decilitri(l-pz[poz],speed[poz])+
decilitri(l-pz[poz],mij)<=k){
total=total-decilitri(l-pz[poz],speed[poz])+
decilitri(l-pz[poz],mij);
speed[poz]=mij;
binary_search(p,mij-1,poz);} else
{binary_search(mij+1,u,poz);}
}
}
void solve(void){
for (ll i=1;i<=n;i++){
binary_search(1,m,i);
}
if (total<=k){
for (ll i=1;i<=n;i++){
printf("%d\n",speed[i]);
}
} else {printf("%d\n",-1);}
fclose(stdout);
return ;
}
int main(void){
iofile();
solve();
return 0;
}