xukeyu @ 2024-08-08 19:22:02
#include<bits/stdc++.h>
using namespace std;
int n,a[1000001],m,b,sum,l,r;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
r=n+1;
cin>>m;
for(int i=1;i<=m;i++){
cin>>b;
while(l<r){
int mid=(l+r)>>1;
if(a[mid]>=b) r=mid;
if(a[mid]<b) l=mid+1;
}
if(a[l]-b<=b-a[l-1]) sum+=a[l]-b;
else sum+=b-a[l-1];
}
cout<<sum;
return 0;
}
by xukeyu @ 2024-08-08 19:31:13
令人一头雾水
by liaocr @ 2024-08-08 19:43:46
@xukeyu 调出来了
if(a[l]-b<=b-a[l-1]) sum+=a[l]-b;
else sum+=b-a[l-1];
这里都套上abs 得70 然后加一个判断
if(b<=a[1])
{
ans+=a[1]-b;
continue;
}
这样就100分了
by liaocr @ 2024-08-08 19:45:08
@xukeyu 但这里Subtask #1的会WA不知道为啥 但还是100分
https://www.luogu.com.cn/record/171450927
by xukeyu @ 2024-08-08 19:49:34
@liaocr 谢谢大佬膜拜(加一个关注)
by liaocr @ 2024-08-08 19:51:46
@xukeyu 知道了 sum开long long 就完全AC了
by jzm_2024 @ 2024-08-11 14:13:13
满分代码
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[100001];
long long ans;
int main(){
int n,m;
cin>>m>>n;
for(int i=1;i<=m;i++){
cin>>a[i];
}sort(a+1,a+m+1);
for(int i=1;i<=n;i++){
int x;
cin>>x;
int pos1,pos2;
pos1=lower_bound(a+1,a+m+1,x)-a;
pos2=pos1-1;
if(pos1==m+1)ans+=x-a[m];
else if(pos1==1)ans+=a[1]-x;
else ans+=min(abs(a[pos1]-x),abs(x-a[pos2]));
}cout<<ans;
return 0;
}
by jzm_2024 @ 2024-08-11 14:14:09
求关注