第十六届蓝桥杯E题:画展布置
·


本题如果想让极差最小的话,一定是先排好序,从小到大选
这时候我们可以用滑动窗口来做
滑动窗口步骤:
step1;初始化:初始化l=1,r=1,然后用num记录画的数目,ret记录差值和
step2:进窗口 num++,如果是第一幅画的话不记录差值,如果不是第一幅的话计算差值加入ret
step3:判断+出窗口
如果num==m,记录结果
出窗口:ret-=a[l+1]-a[l] l++
好的,我们来写一下代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
typedef long long ll;
ll n,m;
ll a[N];
int main()
{
cin >> n >> m;
for(int i = 1;i<=n;i++)
{
cin >> a[i];
}
sort(a+1,a+1+n);
ll l = 1,r = 2;
ll sum = 0;
ll ret = 1e20;
while(r<=n)
{
sum=sum+abs(a[r]*a[r]-a[r-1]*a[r-1]);
while(r-l+1 == m)
{
ret=min(ret,sum);
sum=sum-abs(a[l+1]*a[l+1]-a[l]*a[l]);
l++;
}
r++;
}
cout << ret;
return 0;
}
更多推荐


所有评论(0)