题目描述
画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作,其艺术价值分别为 A1,A2,…,AN。他们需要从这 N 幅画中挑选 M 幅,并按照一定顺序布置在展厅的 M 个位置上。如果随意挑选和排列,艺术价值的变化可能会过于突兀,导致观众的观展体验不够流畅。
为了优化布置,他们查阅了《画展布置指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡尽量平缓。指南建议,选择并排列 M 幅画,应使艺术价值的变化程度通过一个数值 L 来衡量,且该值越小越好。数值 L 的定义为:
L=i=1∑M−1∣Bi+12−Bi2∣
其中 Bi 表示展厅第 i 个位置上画作的艺术价值。
现在,他们希望通过精心挑选和排列这 M 幅画作,使 L 达到最小值,以提升画展的整体协调性。请你帮他们计算出这个最小值是多少。
输入格式
输入共两行。
第一行包含两个正整数 N 和 M,分别表示画作的总数和需要挑选的画作数量。
第二行包含 N 个正整数 A1,A2,…,AN,表示每幅画作的艺术价值。
输出格式
输出一个整数,表示 L 的最小值。
输入输出样例
输入 #1复制
4 2 1 5 2 4
输出 #1复制
3
说明/提示
评测用例规模与约定
- 对于 40% 的评测用例,2≤M≤N≤103,1≤Ai≤103。
- 对于 100% 的评测用例,2≤M≤N≤105,1≤Ai≤105。
-
#include<bits/stdc++.h> using namespace std; long long int n,m; const int N=1e5+10; long long int a[N]={0}; long long int b[N]; int main () { cin>>n>>m; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=n;i++) { b[i]=(long long)a[i]*a[i]; } sort(b+1,b+n+1); long long int minn=1e18; for(int i=m;i<=n;i++) { if(minn>b[i]-b[i-m+1]) { minn=b[i]-b[i-m+1]; } } cout<<minn<<endl; return 0; }