标签:
我们先排序,然后以第二个数组为基础,第一组的数据去查他们在第二组的位置
lower_bound
一共两种情况,要么刚刚好找到,一个在左边
比如
2 3 4 5 7 查找3 返回2
查找 6 返回5 我们不知道它离左边还是右边差值小,可以都考虑进去
查找8 返回最后一个位置
#include<stdio.h> //#include<bits/stdc++.h> #include<string.h> #include<iostream> #include<math.h> #include<sstream> #include<set> #include<queue> #include<map> #include<vector> #include<algorithm> #include<limits.h> #define MAXN (100000+10) #define MAXM (100000) #define inf 0x3fffffff #define INF 0x3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define ULL unsigned long long using namespace std; int a[MAXN],b[MAXN]; int main() { int n,m; while(cin>>n>>m) { int sum=0; int i,j; for(i=1;i<=n;i++) { cin>>a[i]; } for(i=1;i<=m;i++) { cin>>b[i]; } sort(a+1,a+n+1); sort(b+1,b+m+1); for(i=1;i<=n;i++) { int mid=inf; int ans=lower_bound(b+1,b+m+1,a[i])-b; // cout<<ans<<endl; if(ans<=m) { mid=min(mid,abs(a[i]-b[ans])); } if(ans>1) { mid=min(mid,abs(a[i]-b[ans-1])); } sum+=mid; } cout<<sum<<endl; } return 0; }
计算机学院大学生程序设计竞赛(2015’12)The collector’s puzzle
标签:
原文地址:http://www.cnblogs.com/yinghualuowu/p/5525962.html