题目如下:

注意点
其中一个需要注意的点是只能在k+1~~k+n,而不是k+1-k+n
拆解一下题目:(t^2- i^2)c = t^2 * c -i^2c;很明显 i^2 * c是一个固定的常数。不会受喂猫的顺序影响,因此最小值只和 t^2 * c有关。而c也是常熟,因此主要受t的影响。
题解:
如果k>=n:求最小值则只需c最大的最先喂即可。
如果k<n:则第一次选择的c的最大值要在[1,k]中进行选择,之后每一次要的c的最大值需要将将[k+1,n]考虑进去。
代码
#include<iostream>
#include<algorithm>
using namespace std;
#include<bits/stdc++.h>
priority_queue<pair<int ,int>>q;
int main()
{
int n,k;
cin>>n>>k;
int c[n+1]={0};
for(int i=1;i<=n;i++)cin>>c[i];
for(int i=1;i<=k;i++)q.push(make_pair(c[i],i));//将[1,k]先加入
long long mi=0;
for(int i=k+1;i<=k+n;i++)
{
if(i<=n)q.push(make_pair(c[i],i));//依次将[k+1,k+n]加入
pair<int ,int> x=q.top();
q.pop();
mi=mi+(i*i-x.second*x.second)*x.first;
}
cout<<mi<<endl;
return 0;
}