|洛谷|二分|P1678 烦恼的高考志愿

来源:互联网 发布:javascript阮一峰 编辑:程序博客网 时间:2024/04/28 15:24

https://www.luogu.org/problem/show?pid=1678

二分找上下界即可

#include<cstdio>#include<algorithm>#include<cstring>#define ms(i,j) memset(i,j, sizeof i);/*NOIP2016倒计时,RP++ Luogu: P1678 烦恼的高考志愿*/using namespace std; int m,n;int school[100005];int ans = 0;int abss(int x) {return x>=0 ? x : -x;}int bcl(int x){int l=1, r=m;while (r-l>1){int mid = (l+r)/2;if (school[mid]<=x){l = mid;} else r = mid;}return l;}int bcu(int x){int l=1, r=m;while (r-l>1){int mid = (l+r)/2;if (school[mid]>=x){r = mid;} else l = mid;}return r;}int main(){scanf("%d%d", &m, &n);for (int i=1;i<=m;i++) scanf("%d", &school[i]);sort(school+1, school+1+m);for (int i=1;i<=n;i++) {int student; scanf("%d", &student);int b1 = bcl(student);int b2 = bcu(student);ans += min(abss(student-school[b1]),abss(student-school[b2]));} printf("%d\n", ans);    return 0;}


0 0
原创粉丝点击