995玄关
  • 板块灌水区
  • 楼主tt12341234
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/15 09:43
  • 上次更新2024/8/15 09:46:01
查看原帖
995玄关
1291771
tt12341234楼主2024/8/15 09:43

P1678 烦恼的高考志愿

10分求掉

代码如下:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
int arr[N];
int search(int l,int r,int x){
	int ans=r;
	while(l<=r){
		int mid=(l+r)/2;
		if(x>arr[mid]){
			l=mid+1;
		}else{
			r=mid-1;
			ans=mid;
		}
	}
	return ans;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>arr[i];
	}
	sort(arr+1,arr+1+m);
	arr[0]=-1e9;
	int num;
	long long sum = 0;
	while (n--){
		cin>>num;
		if(num>arr[m]){
			sum+=num-arr[m];
			continue;
		}
		int k=search(1,m,num);
		sum+=min(arr[k]-num,num-arr[k-1]);
	}
	cout<<sum;
    return 0;
}

2024/8/15 09:43
加载中...