Pagini recente » Cod sursa (job #2348476) | Cod sursa (job #145756) | Cod sursa (job #2903093) | Cod sursa (job #2215522) | Cod sursa (job #2778587)
#include <bits/stdc++.h>
#define nmax 201
using namespace std;
string prob="smen";
ifstream in(prob+".in");
ofstream out(prob+".out");
int v[nmax];
int n,k,a,b;
unordered_map<int,int> per,res;
bool findpair(int nr,int i,int dist){
for(int ii=i;ii<n;ii++){
if(nr+dist==v[ii]&&res[ii]==nmax){res[ii]=nr;per[nr]=v[ii];return 1;}
if(nr-dist==v[ii]&&res[ii]==nmax){res[ii]=nr;per[nr]=v[ii];return 1;}
}
for(int ii=i;ii<n;ii++){
if(nr+dist==v[ii]&&findpair(res[ii],ii+1,dist)){res[ii]=nr;per[nr]=v[ii];return 1;}
if(nr-dist==v[ii]&&findpair(res[ii],ii+1,dist)){res[ii]=nr;per[nr]=v[ii];return 1;}
}
return 0;
}
int main(){
for(int i=0;i<nmax;i++){res[i]=nmax;}
int minn=0;
in>>n>>k>>a>>b;
for(int i=a;i<=b;i++)per[i]=nmax;
int nr;
for(int i=0;i<n;i++){
in>>nr;
if(nr<a){
minn+=a-nr;
nr=a;
}
if(nr>b){
minn+=nr-b;
nr=b;
}
v[i]=nr;
}
for(int i=0;i<=400&&k;i++){
for(int j=a;j<=b;j++){
if(per[j]==nmax&&findpair(j,0,i)){
k--;
}
if(!k)break;
}
}
for(int i=0;i<n;i++){
if(res[i]!=nmax){
minn+=(v[i]-res[i]>0?v[i]-res[i]:res[i]-v[i]);
}
}
out<<minn<<'\n';
for(int i=0;i<n;i++){
if(res[i]!=nmax){
out<<res[i]<<' ';
}else out<<v[i]<<' ';
}
}