求助家人们,能给一下几个点的测试数据嘛
查看原帖
求助家人们,能给一下几个点的测试数据嘛
1456513
arncer楼主2024/9/26 14:50

求助,我自己输入的测试数据都对,但是一个样例都过不了,能给几个洛谷的测试数据嘛大佬们

#include<iostream>
#include<algorithm>
#include<cmath>
//导入数学库
using namespace std;
//分析:这道题, 划分性质的是绝对值的变化,先减少后增,绝对值一直减少的就是蓝驱
const int N=100010;
int scores[N];
int nums[N];
bool check(int x,int score,int disValue) { //这是找绝对值的最小值
	if(abs(x-score) <= disValue) return true;
	return false;
}
int search(int *arr,int len,int score ) {
	int l=0,r=len;int disValue=abs(arr[0]-score);
	while(l+1!=r) {
		int mid=(l+r)/2;
		if(check(arr[mid],score,disValue)){
			l=mid;
			disValue=abs(arr[mid]-score);
		} 
		else r=mid;
	}
	return disValue;
}
int main() {
	//cin,cout 输入输出加速
	int m,n;
	long long sum=0;
	cin>>m>>n;
	for(int i=0; i<m; i++) cin>>scores[i];
	for(int i=0; i<n; i++) cin>>nums[i];
	//先将学校分数从小到大排序
	sort(scores,scores+m);
	for(int i=0;i<n;i++){
		sum+=search(scores,m,nums[i]);
	}
	cout<<sum;
}
2024/9/26 14:50
加载中...