二分求助,为何 l<r AC而 l<=r 60分
查看原帖
二分求助,为何 l<r AC而 l<=r 60分
398455
NeNe_楼主2023/7/2 15:59

60分代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a[100005];
int n,m,p,ans;
int search(int l,int r)
{
	int ansr,mid;
	while(l<=r)
	{
		mid=l+(r-l)/2;
		if(a[mid]>p)
		{
			ansr=mid;
			r=mid-1;
		}
		else l=mid+1;
	}
	return min(abs(a[ansr]-p),abs(a[ansr-1]-p));
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>m>>n;
	for(int i=1;i<=m;i++) cin>>a[i];
	a[0]=a[1];
	sort(a+1,a+m+1);
	for(int i=1;i<=n;i++)
	{
		cin>>p;
		ans+=search(1,m);
	}
	cout<<ans;
	return 0;
}

AC代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a[100005];
int n,m,p;
ll ans;
int search(int l,int r)
{
	int mid;
	while(l<r)
	{
		mid=l+(r-l)/2;
		if(a[mid]>p) r=mid;
		else l=mid+1;
	}
	return min(abs(a[l]-p),abs(a[l-1]-p));
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>m>>n;
	for(int i=1;i<=m;i++) cin>>a[i];
	a[0]=a[1];
	sort(a+1,a+m+1);
	for(int i=1;i<=n;i++)
	{
		cin>>p;
		ans+=search(1,m);
	}
	cout<<ans;
	return 0;
}
2023/7/2 15:59
加载中...