六尺之下 @ 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
如果
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;
}