aa2211034566 @ 2024-02-03 22:55:42
#include<iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
int school[101000];
int student[101000];
long long int sum=0;
long long int zanshi=0;
int guji(int x,int a[],int l,int r){
if(l>r){
return -1;
}
else{
int mid=(l+r)/2;
if(a[mid]>=x){
int t=guji(x,a,l,mid-1);
if(t==-1){
return mid;
}
else{
return t;
}
}
if(a[mid]<x){
return guji(x,a,mid+1,r);
}
}
}//找比他大,如果最大返回-1和最后一个元素相减 最小返回1第一个元素
//找的到就返回位置
//找不到返回-1
int main(){
int m,n;
cin>>m>>n;
for(int i=1;i<=m;i++){
cin>>school[i];
}
for(int i=1;i<=n;i++){
cin>>student[i];
}
sort(school+1,school+m);
for(int i=1;i<=n;i++){
int k=guji(student[i],school,1,m);
int e;
if(k==1){ //所有都比他大
e=abs(student[i]-school[k]);
}
else if(k>1){
e=min(abs(student[i]-school[k]),abs(student[i]-school[k-1]));
}
else{ //所有都比他小
e=student[i]-school[m];
}
sum+=e;
}
cout<<sum;
return 0;
}
by masonxiong @ 2024-02-07 16:30:00
你的 sort()
函数使用不对
应写为 sort(school+1, school+m+1)