7 solutions

  • 1
    @ 2022-1-6 21:05:27

    思路

    也就一个找大于等于该数的第一位数和小于等于该数的第一个数然后求最小值问题

    #include<bits/stdc++.h>
    using namespace std;
    int m,n;
    int num;
    int a[10000000];
    int find(int x){
    	int l=0;
    	int r=m-1;
    	while(l<=r){
    		int mid=l+r>>1;
    		if(a[mid]>=x) r=mid-1;
    		else l=mid+1;
    	}
    	if(num<=a[0]) return 1;//注意这一步 这道题数据不充分,不要这一步也能过,但下面有一道题是需要这一步的 
    	return l;
    }
    int main(){
    	cin>>m>>n;
    	for(int i=0;i<m;i++){
    		cin>>a[i];
    	}
    	sort(a,a+m);
    	int sum=0;
    	for(int i=0;i<n;i++){
    		cin>>num;
    		sum+=min(abs(num-a[find(num)]),abs(num-a[find(num)-1]));
    	}
    	cout<<sum;
    	return 0;
    } 
    

    Information

    ID
    280
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    266
    Accepted
    51
    Uploaded By