AcWing每日一题-2022-4-19
题目链接:https://www.acwing.com/problem/content/description/1355/
个人题解:
- 我们对 \(1-100\) 以内所有的 \([l,r]\) 区间进行枚举,其中 \(r-l=17\)
- 在这个区间的控制下,我们对每座山峰进行“修剪”,保证其高度在 \([l,r]\) 区间内,差值恒为17
- 定义一个无穷大数 \(res\),然后找出使得花费最小的一对 \([l,r]\) 和 \(res\) 取一个 \(min\) 即可。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int n,a[N],res=0x3f3f3f3f;
int get(int n)
{
return n*n;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=1;i+17<=100;i++)
{
int ans=0,l=i,r=i+17;
for(int j=0;j<n;j++)
{
if(a[j]<l) ans+=get(a[j]-l);
else if(a[j]>r) ans+=get(a[j]-r);
else continue;
}
res=min(res,ans);
}
cout<<res<<endl;
return 0;
}

浙公网安备 33010602011771号