#include<iostream>
#include<algorithm>
using namespace std;
int maxi(int *tab, int *zmien,int n){
int maxi=-1;
int maxiid=-1;
for(int i=0;i<n;++i){
if(tab[i]>maxi && zmien[i]==0){
maxi=tab[i];
maxiid=i;
}
}
return maxiid;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k;
cin>>n;
cin>>k;
int poz[n];
int zmien[n];
int pom;
for(int i=0;i<n;++i){
cin>>pom;
poz[i]=pom;
zmien[i]=0;
}
int odp=0;
if(n==1){
cout<<0;
return 0;
}
if(k==0){
int maks=maxi(poz,zmien,n);
int war_maks=poz[maks];
for(int i=0;i<n;++i){
odp+=war_maks-poz[i];
}
cout<<odp;
return 0;
}
for(int i=0;i<n;++i){
int akt=maxi(poz,zmien,n);
zmien[akt]=1;
if(akt!=n-1 && akt!=0){
if(poz[akt]-poz[akt-1]>k){
odp+=poz[akt]-poz[akt-1]-k;
poz[akt-1]+=poz[akt]-poz[akt-1]-k;
}
if(poz[akt]-poz[akt+1]>k){
odp+=poz[akt]-poz[akt+1]-k;
poz[akt+1]+=poz[akt]-poz[akt+1]-k;
}
}
else if(akt==n-1){
if(poz[akt]-poz[akt-1]>k){
odp+=poz[akt]-poz[akt-1]-k;
poz[akt-1]+=poz[akt]-poz[akt-1]-k;
}
}
else if(akt==0){
if(poz[akt]-poz[akt+1]>k){
odp+=poz[akt]-poz[akt+1]-k;
poz[akt+1]+=poz[akt]-poz[akt+1]-k;
}
}
}
cout<<odp;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include<iostream> #include<algorithm> using namespace std; int maxi(int *tab, int *zmien,int n){ int maxi=-1; int maxiid=-1; for(int i=0;i<n;++i){ if(tab[i]>maxi && zmien[i]==0){ maxi=tab[i]; maxiid=i; } } return maxiid; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k; cin>>n; cin>>k; int poz[n]; int zmien[n]; int pom; for(int i=0;i<n;++i){ cin>>pom; poz[i]=pom; zmien[i]=0; } int odp=0; if(n==1){ cout<<0; return 0; } if(k==0){ int maks=maxi(poz,zmien,n); int war_maks=poz[maks]; for(int i=0;i<n;++i){ odp+=war_maks-poz[i]; } cout<<odp; return 0; } for(int i=0;i<n;++i){ int akt=maxi(poz,zmien,n); zmien[akt]=1; if(akt!=n-1 && akt!=0){ if(poz[akt]-poz[akt-1]>k){ odp+=poz[akt]-poz[akt-1]-k; poz[akt-1]+=poz[akt]-poz[akt-1]-k; } if(poz[akt]-poz[akt+1]>k){ odp+=poz[akt]-poz[akt+1]-k; poz[akt+1]+=poz[akt]-poz[akt+1]-k; } } else if(akt==n-1){ if(poz[akt]-poz[akt-1]>k){ odp+=poz[akt]-poz[akt-1]-k; poz[akt-1]+=poz[akt]-poz[akt-1]-k; } } else if(akt==0){ if(poz[akt]-poz[akt+1]>k){ odp+=poz[akt]-poz[akt+1]-k; poz[akt+1]+=poz[akt]-poz[akt+1]-k; } } } cout<<odp; return 0; } |
English