我是歌者 @ 2024-08-11 14:31:34
#include<bits/stdc++.h>
using namespace std;
long long int n,m,sc[1000000],st[1000000],ans;
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
cin>>sc[i];
}
for(int i=1;i<=n;i++){
cin>>st[i];
}
sort(sc+1,sc+m+1);
for(int i=1;i<=n;i++){
int l=1,r=m+1;
int mid=0;
while(r-l>1){
mid=(l+r)/2;
if(sc[mid]==st[i]){
break;
}
if(sc[mid]>st[i]){
r=mid;
}
if(sc[mid]<st[i]){
l=mid;
}
}
ans+=min(min(abs(sc[l]-st[i]),abs(sc[r]-st[i])),abs(sc[mid]-st[i]));
}
cout<<ans;
}
by BGM114514 @ 2024-08-11 14:39:54
别问为什么,问就是数组开的不够大。
by BGM114514 @ 2024-08-11 14:40:05
@我是歌者
by 我是歌者 @ 2024-08-11 14:45:59
@BGM114514 开到顶了也没过。。。
by 我是歌者 @ 2024-08-11 14:47:07
@BGM114514 开到30000000也没过。
by BGM114514 @ 2024-08-11 14:55:54
@我是歌者
#include<bits/stdc++.h>
using namespace std;
long long int n,m,sc[1000001],st[1000001],ans;
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
cin>>sc[i];
}
for(int i=1;i<=n;i++){
cin>>st[i];
}
sort(sc+1,sc+m+1);
for(int i=1;i<=n;i++){
int l=1,r=m+1;
int mid=0;
while(l<r){
mid=(l+r)/2;
if(sc[mid]>st[i]){
r=mid;
}
if(sc[mid]<=st[i]){
l=mid+1;
}
}
if(st[i]<=sc[1]){
ans+=sc[1]-st[i];
}
else ans+=min(abs(sc[l-1]-st[i]),abs(sc[l]-st[i]));
}
cout<<ans;
}
by 我是歌者 @ 2024-08-11 15:00:03
@BGM114514 谢谢谢谢
by C929_chloe @ 2024-08-14 10:27:00
有没有可能是因为你用的万能头......