70分(牢大坠机力

P1678 烦恼的高考志愿

QAQ_juruo @ 2024-02-22 22:55:28

标题为了吸引QAQ

#include<bits/stdc++.h>
using namespace std;
int a[int(1e5+5)],b[int(1e5+5)];
int main(){
    long long ans=0,num,n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=m;i++)
        cin>>b[i];
    int left,right,mid;
    for(int i=1;i<=m;i++){
        left=0,right=n+1;
        while(left+1<right){
            mid=(left+right)/2;
            if(b[i]>=a[mid])
                left=mid;
            else
                right=mid;
        }
        if(abs(b[i]-a[left])<abs(a[right]-b[i]))
            num=abs(b[i]-a[left]);
        else
            num=abs(a[right]-b[i]);
        ans+=num;
    }
    cout<<ans;
    return 0;
}

by 迟暮天复明 @ 2024-02-22 23:01:56

建议二分这种东西去找一个稳定不会挂的确定的写法。


by QAQ_juruo @ 2024-02-23 09:00:57

@迟暮天复明 检查了一下,二分那段并没有什么问题,好像是少判特殊情况了。


by 迟暮天复明 @ 2024-02-23 10:44:13

@QAQ_juruo 这么厉害。

主要现在真的各种野生的奇奇怪怪的二分看多了(


by QAQ_juruo @ 2024-02-24 12:44:25

@迟暮天复明 还好我们老师没有讲什么开区间和闭区间()


|