补题...之前欠的债...
题目链接:P8872 [传智杯 #5 初赛] D-莲子的物理热力学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
主要思路:遍历加贪心。从前往后和从后往前的转换。
当时主要是想的有点多了,在想重复的该怎计算,实际上没有必要就直接遍历就好,遍历的思路就是把后面全面成前面的第i个,而在变成前面的第i个时后面就要被转换m-i*2个所以最后一个没有被转换的下标就是n-1-(m-i*2)
把后面转换遍历完之后还有把前面转换到后面遍历,思路也是一样的。
ac代码:
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
ll a[100005];
int main(){
ll n,m,cha;
cin>>n>>m;
for(int i=0;i<n;i++ ) {
cin>>a[i];
}
sort(a,a+n);
cha=a[n-1]-a[0];
if(n<=m) cha=0;
else{
for(int i= 0;i<=m/2;i++) {
int k=n-1-(m-i*2);
cha=min(cha,a[k]-a[i]);
}
for(int i=0;i<=m/2;i++) {
int k=m-i*2;
cha=min(cha,a[n-1-i]-a[k]);
}
}
cout<<cha<<endl;
}