用了二分,50分,不知错哪了,求大神看看
查看原帖
用了二分,50分,不知错哪了,求大神看看
1006222
Feng123754楼主2024/1/24 18:00
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 100010;
int a[N],m;


int findl(int x)  //找到第一个大于等于的数
{
    int l=0,r=m+1;
    while(l<r)
    {
        int mid=(l+r)/2;
        if(x<=a[mid]) r=mid;
        else l=mid+1;
    }
    
    return l;
}

int findr(int x)
{
    int l=0,r=m+1;
    while(l<r)
    {
        int mid=(l+r+1)/2;
        if(x>=a[mid]) l=mid;
        else r=mid-1;
    }
    
     return l;
}

int main()
{
    int n,res=0;
    cin>>m>>n;
    for(int i=0;i<m;i++) cin>>a[i];
    sort(a,a+m);
    while(n--)
    {
        int x;
        cin>>x;
        res+=min(abs(x-a[findr(x)]),abs(x-a[findl(x)]));
    }
    cout<<res;
    return 0;
}
2024/1/24 18:00
加载中...