不知道为什么只能过70,蒟蒻求解

P1678 烦恼的高考志愿

买茶 @ 2023-10-13 17:26:03

不知道为什么只能过70 蒟蒻求解

#include<stdio.h>
#define N 100001
int m,n,a[N],b[N],ans,mid,l,r;
void swap(int *a,int *b)
{
    int t=*a;
    *a=*b;
    *b=t;
}
void qsort(int l,int r)
{
    int i=l,j=r;
    int mid=a[(l+r)/2];
    while(i<=j)
    {
        while(a[i]<mid) i++;
        while(a[j]>mid) j--;
        if(i<=j)
        {
            swap(&a[i],&a[j]);
            i++;
            j--;
        }
    }
    if(l<j) qsort(l,j);
    if(i<r) qsort(i,r);
}
int abs(int x)
{
    if(x>=0) return x;
    if(x<0) return -x;
}
int main()
{
    scanf("%d%d",&m,&n);
    for(int i=1;i<=m;i++) scanf("%d",&a[i]);
    qsort(1,m);
    for(int i=1;i<=n;i++) scanf("%d",&b[i]);
    for(int i=1;i<=n;i++)
    {
        l=1,r=m;
        while(l<=r)
        {
            mid=(l+r)/2;
            if(b[i]>=a[mid]) l=mid+1;
            if(b[i]<a[mid]) r=mid-1;
        }
        if(abs(b[i]-a[l])<=abs(b[i]-a[r])) ans+=abs(b[i]-a[l]);
        else ans+=abs(b[i]-a[r]);
    }
    printf("%d",ans);
    return 0;
}

|