题解 | 小红的平滑值插值

小红的平滑值插值

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;
}

全部评论

相关推荐

03-04 07:14
门头沟学院 C++
后测速成辅导一两个月...:老板:都给工作机会了还想要工资,哪来这么多好事
点赞 评论 收藏
分享
03-04 22:09
已编辑
南昌大学 golang
西北上单:29届? 请你去三角洲猛攻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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