80分,求助大佬

P1678 烦恼的高考志愿

六尺之下 @ 2020-07-13 12:12:47

前前后后看了好多遍都不觉得有问题

#include<bits/stdc++.h>
using namespace std;
long long m,n,sum=0;
int main() //m学校数,n学生数,a1学校录取线,b1学生估分 
{
    scanf("%lld%lld",&m,&n);
    long long a1[m+2],b1[n+2];
    for(long long i=1;i<=m;i++) scanf("%lld",&a1[i]);
    for(long long i=1;i<=n;i++) scanf("%lld",&b1[i]);
    sort(a1+1,a1+m+1); sort(b1+1,b1+n+1);
    for(long long i=1;i<=n;i++)
    {
        long long p=lower_bound(a1+1,a1+m+1,b1[i])-a1;//找到与估分最接近的分数线的数组下标
        sum=sum+min(abs(a1[p]-b1[i]),abs(b1[i]-a1[p-1]));//比较两个,得出最小值
    }
    printf("%lld",sum);
    return 0;
}

by 六尺之下 @ 2020-07-13 12:13:56

3,8,10wa掉了


by J与M等于Y @ 2020-07-13 12:27:50

如果 p=m+1p=1 怎么办?


by J与M等于Y @ 2020-07-13 12:27:56

@六尺之下


by 六尺之下 @ 2020-07-13 12:44:56

@J与M等于Y 谢谢大佬


by 六尺之下 @ 2020-07-13 12:45:24

改好了

#include<bits/stdc++.h>
using namespace std;
long long m,n,sum=0,p;
int main() //m学校数,n学生数,a1学校录取线,b1学生估分 
{
    scanf("%lld%lld",&m,&n);
    long long a1[m+2],b1;
    for(long long i=1;i<=m;i++) scanf("%lld",&a1[i]);
    sort(a1+1,a1+m+1);
    for(long long i=1;i<=n;i++)
    {
        scanf("%lld",&b1);
        p=lower_bound(a1+1,a1+m+1,b1)-a1;
        if(p==m+1) sum=sum+b1-a1[m];//当b1[i]比所有数都大 
            else
                if(p==1) sum=sum+a1[1]-b1;//当b1[i]比所有数都小 
                    else 
                        sum=sum+min(abs(a1[p]-b1),abs(b1-a1[p-1]));
    }
    printf("%lld",sum);
    return 0;
}

|