While循环里的相似代码为什么结果大不一样呢?求助!!!
查看原帖
While循环里的相似代码为什么结果大不一样呢?求助!!!
275982
薛定谔的狼楼主2021/5/22 22:48

这是我一开始的代码

#include<bits/stdc++.h>
using namespace std;
int n;
long long m,a[1000100],l=0,r=0,mid,sum=0;
int main()
{
	//freopen("1873.in","r",stdin);
	//freopen("1873.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]>r) r=a[i];
	}
	while(l<r)
	{
		mid=(l+r)>>1;sum=0;
		for(int i=1;i<=n;i++)
		   if(a[i]>mid) sum=sum+a[i]-mid;
		if(sum>m) l=mid+1; 
		else r=mid;
	}
	cout<<l;
	return 0;
}

这是后来AC的代码

#include<bits/stdc++.h>
using namespace std;
int n;
long long m,a[1000100],l=0,r=0,mid,sum=0;
int main()
{
	freopen("1873.in","r",stdin);
	//freopen("1873.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]>r) r=a[i];
	}
	while(l<r)
	{
		mid=(l+r+1)>>1;sum=0;
		for(int i=1;i<=n;i++)
		   if(a[i]>mid) sum=sum+a[i]-mid;
		if(sum>=m) l=mid; 
		else r=mid-1;
	}
	cout<<l;
	return 0;
}

只有 while循环 那一段不同,感觉差不多,为什么就不一样呢?

2021/5/22 22:48
加载中...