同样的功能,不一样的代码(求修改)
查看原帖
同样的功能,不一样的代码(求修改)
1269776
52hertz_yh楼主2024/6/11 11:30

这是满分代码:

#include<bits/stdc++.h>
using namespace std;
long long a[10000007],ans,c,d,e,m,n;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	sort(a+1,a+n+1);
	int l=0,r=a[n];
	while(l<=r)
	{
		int mid=(l+r)/2;
		ans=0;
		for(int i=1;i<=n;i++)
		{
			if(a[i]>mid)
			ans+=a[i]-mid;
		}
		/*if(ans==m)break;*/
		if(ans<m)r=mid-1;
		else l=mid+1;
	}
	cout<<r;
	return 0;
}

想加速特判结果10分:

#include<bits/stdc++.h>
using namespace std;
long long a[10000007],ans,c,d,e,m,n;
bool q=0;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	sort(a+1,a+n+1);
	int l=0,r=a[n];
	while(l<=r)
	{
		int mid=(l+r)/2;
		ans=0;
		for(int i=1;i<=n;i++)
		{
			if(a[i]>mid)
			ans+=a[i]-mid;
		}
		if(ans<m)r=mid-1;
		else l=mid+1;
		if(ans==m)
		{
			cout<<mid;
			q=true;
		}
	}
	if(q=false)cout<<r;
	return 0;
}
2024/6/11 11:30
加载中...