AcWing每日一题-2022-4-19

题目链接:https://www.acwing.com/problem/content/description/1355/

 

个人题解:

  1. 我们对 \(1-100\) 以内所有的 \([l,r]\) 区间进行枚举,其中 \(r-l=17\)
  2. 在这个区间的控制下,我们对每座山峰进行“修剪”,保证其高度在 \([l,r]\) 区间内,差值恒为17
  3. 定义一个无穷大数 \(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;
}



posted @ 2022-04-20 07:15  黑VS白-清墨  阅读(22)  评论(0)    收藏  举报