10pts,二分,人已疯
查看原帖
10pts,二分,人已疯
755327
AIMEE11楼主2024/6/15 17:21
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int m, n;
long long a[100005], b[100005];
long long int ans;
int search(int l, int r, int x) {
	while(l<r) {
		int mid=(l+r)/2;
		if(a[mid]>=x) r=mid;
		else l=mid+1;
	}
	return r;
}
int main() {
	cin>>m>>n;//a学校,b估分
	for(int i=1; i<=m; i++) cin>>a[i];
	for(int i=1; i<=n; i++) cin>>b[i];
	sort(a+1, a+n+1);
	for(int i=1; i<=n; i++) {
		int zy;
		zy=search(1, m+1, b[i]);
		int p, q;
		p=abs(a[zy]-b[i]); q=abs(a[zy-1]-b[i]);
		ans+=min(p,q);//前插的位置前后的分差
	}
	cout<<ans;
	return 0;
}

只对了一个点,二分用的是前插。

不太理解为什么错,求助

2024/6/15 17:21
加载中...