如果两个相邻数差的绝对值>k,则需要分成<=k的小段,操作次数(d+k-1)/k-1;
特别注意,如果原数组的平滑值<k,则只需要操作一次,将平滑值提高到k。
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll=long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
ll k;
cin>>n>>k;
vector<ll>a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}
ll ans=0,maxd=0;
for(int i=1;i<n;i++){
ll d=llabs(a[i]-a[i-1]);
maxd=max(maxd,d);
if(d>k)ans+=(d+k-1)/k-1;
}
if(maxd<k)cout<<1<<endl;
else cout<<ans<<endl;
return 0;
}

京公网安备 11010502036488号