alice132

 

2025.12.20 作业 - # P12134 [蓝桥杯 2025 省 B] 画展布置

题目描述

画展策展人小蓝和助理小桥为即将举办的画展准备了 \(N\) 幅画作,其艺术价值分别为 \(A_1, A_2, \dots , A_N\)。他们需要从这 \(N\) 幅画中挑选 \(M\) 幅,并按照一定顺序布置在展厅的 \(M\) 个位置上。如果随意挑选和排列,艺术价值的变化可能会过于突兀,导致观众的观展体验不够流畅。

为了优化布置,他们查阅了《画展布置指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡尽量平缓。指南建议,选择并排列 \(M\) 幅画,应使艺术价值的变化程度通过一个数值 \(L\) 来衡量,且该值越小越好。数值 \(L\) 的定义为:

\[L=\sum_{i=1}^{M-1} |B_{i+1}^2-B_i^2| \]

其中 \(B_i\) 表示展厅第 \(i\) 个位置上画作的艺术价值。

现在,他们希望通过精心挑选和排列这 \(M\) 幅画作,使 \(L\) 达到最小值,以提升画展的整体协调性。请你帮他们计算出这个最小值是多少。

输入格式

输入共两行。

第一行包含两个正整数 \(N\)\(M\),分别表示画作的总数和需要挑选的画作数量。

第二行包含 \(N\) 个正整数 \(A_1, A_2, \dots , A_N\),表示每幅画作的艺术价值。

输出格式

输出一个整数,表示 \(L\) 的最小值。

输入输出样例 #1

输入 #1

4 2
1 5 2 4

输出 #1

3

说明/提示

评测用例规模与约定

  • 对于 \(40\%\) 的评测用例,\(2 \leq M \leq N \leq 10^3\)\(1 \leq A_i \leq 10^3\)
  • 对于 \(100\%\) 的评测用例,\(2 \leq M \leq N \leq 10^5\)\(1 \leq A_i \leq 10^5\)

题解

最小方案一定满足满足 \(a_i\) 有序。

  1. 按照 \(a_i^2\) 排序。
  2. 枚举长度为 \(m\) 的区间,区间代价为 \(a[i]^2-a[i-m+1]^2\)
  3. 求所有方案的最小值。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int n,m;
LL a[100003];

int main() {
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) cin>>a[i],a[i]*=a[i];
    sort(a+1,a+1+n);
    LL Ans=a[m]-a[1];
    for (int i=m+1;i<=n;i++)
        if (Ans>a[i]-a[i-m+1]) Ans=a[i]-a[i-m+1];
    cout<<Ans<<endl;
    return 0;
}

posted on 2026-01-22 21:45  alice_ss  阅读(0)  评论(0)    收藏  举报

导航