题目:烦恼的高考志愿
思路:几乎所有的题解都说这题需要二分,其实排个序用个标记滑移下就好了。
注意:边界情况,如一个估分比所有分数线都高或都低的情况。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
#define read(x) scanf("%d",&x)
#define ll long long
int n,m;
int a[maxn+5];
int b[maxn+5];
int main() {
read(m),read(n);
for(int i=1;i<=m;i++) read(b[i]);
for(int i=1;i<=n;i++) read(a[i]);
sort(a+1,a+1+n);
sort(b+1,b+1+m);
ll ans=0;
int t=2;
b[m+1]=1e9;
for(int i=1;i<=n;i++) {
while(a[i]>=b[t]) ++t;
ans+=min(abs(b[t]-a[i]),abs(a[i]-b[t-1]));
}
printf("%lld",ans);
return 0;
}