本文主要是介绍小红的平滑值插值【牛客周赛38】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
小红定义一个数组的“平滑值”为:相邻两数差的绝对值的最大值。
具体的,数组a的平滑值定义为
现在小红拿到了一个数组。她每次操作可以在两个元素之间添加一个整数(不能添加在第一项前面或者最后一项后面)。小红希望最终数组的平滑值恰好等于k,你能帮小红求出最小的操作次数吗?
坑点: 这个题有一个坑点,卡了我半个小时,当读入
5 2
1 2 3 4 5
这种情况要注意,没有一种情况是符合的,差值最大才是1,所以我们还要记得挑选出每一步的差值的最大,看看mmax是否大于k,如果没有,那么必须操作一次,对应ans++
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long L;
L n,k,ans,mmax;
int arr[200005];
int main()
{cin>>n>>k;for(int i=1;i<=n;i++)cin>>arr[i];//输入数值for(int i=2;i<=n;i++){int temp=abs(arr[i]-arr[i-1]);//判断差值if(temp>mmax) mmax=temp;//找到整个数列的差值的最大//这一步其实在“坑点”部分解释过了if(temp>k)//差值太大了,需要插入数{ans+=(temp-1)/k;//看看需要插入几个数}}if(ans==0&&mmax<k) ans++;//数太小ans++cout<<ans;return 0;
}
这篇关于小红的平滑值插值【牛客周赛38】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!