7 solutions
-
1
思路
也就一个找大于等于该数的第一位数和小于等于该数的第一个数然后求最小值问题
#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