洛谷 1678 烦恼的高考志愿

xiaoxiao2021-02-28  107

题目链接:烦恼的高考志愿

题目大意:给你m个学校录取分,然后再给你n个学生分,枚举n个学生分找出上面m个分里面与每个学生分差值最小的值,然后差值做贡献,算最后的贡献

题目思路:直接二分即可,找刚好大于等于它的第一个数和刚好小于等于它的第一个数,特判一下第一个学校录取分就大于当前分的情况

#include <bits/stdc++.h> using namespace std; typedef long long ll; ll m,n,x,a[1000005]; int main(){ while(~scanf("%lld%lld",&m,&n)){ for(ll i = 0;i < m;i++) scanf("%lld",&a[i]); sort(a,a+m); ll sum = 0; int minn; for(ll i = 0;i < n;i++){ scanf("%lld",&x); if(a[lower_bound(a,a+m,x)-a] == a[0]) sum += abs(x-a[0]); else sum += min(abs(x-a[lower_bound(a,a+m,x)-a]),abs(x-a[lower_bound(a,a+m,x)-a-1])); } printf("%lld\n",sum); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-42794.html

最新回复(0)