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:23:12
在线等QwQ
by liaocr @ 2024-08-08 19:25:32
@xukeyu m要和n一起输入
by xukeyu @ 2024-08-08 19:26:02
@liaocr 额,6,
by mayike @ 2024-08-08 19:26:09
你为啥 l=0,r=n+1
,不应该 l=1,r=n
吗?
by xukeyu @ 2024-08-08 19:27:06
@mayike 这里n + 1是为了保证在数组a的范围内进行查找。
by xukeyu @ 2024-08-08 19:28:04
现在代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000001],m,b,sum,l,r;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
r=n+1;
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 liaocr @ 2024-08-08 19:28:51
@xukeyu 把m和n一起输入 for循环里l和r都要设置回去
by mayike @ 2024-08-08 19:28:52
@xukeyu 不过你的数据是 1~n 啊,建议以后不要这么做,就按题目范围来。不然容易出错
by xukeyu @ 2024-08-08 19:29:44
@liaocr @mayike 说的是
by liaocr @ 2024-08-08 19:29:56
@xukeyu 改完之后60了 代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000001],m,b,sum,l,r;
int main(){
cin>>n >> m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
r=n+1;
for(int i=1;i<=m;i++){
l = 1;
r = n+1;
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;
}