623严佳冶 @ 2021-05-16 19:05:31
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
int m,n,sum=0;
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)//wkkk
cin>>a[i];
sort(a+1,a+m+1);/////
for(int i=1;i<=n;i++){
int p1=0,p2=0,pp=0;
cin>>b[i];
p1=abs(a[ upper_bound(a+1,a+m+1,b[i])-a ] - b[i]);
p2=abs(a[ upper_bound(a+1,a+m+1,b[i])-a-1 ] - b[i]);
pp=min(p1,p2);
sum+=pp;
}
cout<<sum<<endl;
return 0;
}
by 一个人心 @ 2021-05-19 20:00:17
引用别人的数据
2 1
300 600
110
应该是 190
by SuipiX @ 2021-08-07 10:18:06
我做题时候有个错误点不知道跟你的一不一样
就是在 a数组的第0个位置 它是等于 0 的
然后 pp=min(p1,p2); 可能去取到 0 这就错了
这是我碰到的错点 不知道你是不是
by Winner8fighting @ 2021-08-07 10:56:38
@SuipiX
应该是 如果目标学校的位置刚好在数组的最左或最右,都+1或者-1判断,就越界了
特判一下
(昨天,我也这样错过┭┮﹏┭┮)
感谢@一个人心 的数据