Information
- ID
- 280
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 279
- Accepted
- 53
- Uploaded By
也就一个找大于等于该数的第一位数和小于等于该数的第一个数然后求最小值问题
#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;
}
By signing up a 追梦算法网 universal account, you can submit code and join discussions in all online judging services provided by us.