这个思路有什么问题吗
查看原帖
这个思路有什么问题吗
250699
mot1ve楼主2022/12/7 17:56

一半AC一半WA,WA的点是输出了0,应该不是0

#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans=0x3f3f3f3f;
int n,m;
int a[1000010];
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	if(m>=n-1)
	{
		cout<<0;
		return 0;
	}
	sort(a+1,a+1+n);
	for(int i=0;i<=m;i++)//枚举最小变最大的次数,m-i就是最大变最小的次数 
	{
		//先把最小变最大,此时最小值确定了,看最大值是多少就行。 
		int minn1=a[1+i];
		int maxn1=a[n-max(0ll,1ll*m-i-i)];
		if(minn1<=maxn1)
		ans=min(ans,maxn1-minn1);
		//先把最大变最小,此时最大值确定了,看最小值是多少就行。 
		int maxn2=a[n-(m-i)];
		int minn2=a[1+max(0ll,1ll*i+i-m)];
		if(minn2<=maxn2)
		ans=min(ans,maxn2-minn2);
	}
	cout<<ans;
	return 0;
}
2022/12/7 17:56
加载中...