题解 | 小红的平滑值插值

小红的平滑值插值

https://www.nowcoder.com/practice/97f6b71b1df745cd9926eb861e2d89df

如果两个相邻数差的绝对值>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;
}

全部评论

相关推荐

牛客41077653...:想问一下华为池子是不是很大呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务