- 查找最接近的元素
bangbangni
- @ 2026-6-27 11:17:47
#include<bits/stdc++.h>
using namespace std;
int a[100005],n;
void find(int x){
int l=1,r=n;
int mid;
if(x>a[n]){
cout<<a[n]<<endl;
return;
}
if(x<a[1]){
cout<<a[1]<<endl;
return;
}
while(l<=r){
if(a[mid]==x){
cout<<a[mid]<<endl;
return;
}
mid=(l+r)/2;
if(a[mid]<x){
l=mid+1;
}else{
r=mid-1;
}
}
if(abs(a[l]-x)<abs(a[r]-x)){
cout<<a[l]<<endl;
return;
}else{
cout<<a[r]<<endl;
return;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int m;
cin>>m;
for(int i=1;i<=m;i++){
int x;
cin>>x;
find(x);
}
return 0;
}
2 条评论
-
-
#include<bits/stdc++.h> using namespace std; int n,m,q,a[100001]; int find(int t){ int l=1,r=n; while(l<=r){ int mid=(l+r)/2; if(a[mid]<t) l=mid+1; else if(a[mid]>=t) r=mid-1; } if(l<0||l>n) l=0; if(r<0||r>n) r=0; if(l==r&&r==0){ if(t>a[n]) return a[n]; else return a[1]; } if(abs(t-a[l])==abs(t-a[r])) return min(a[l],a[r]); else if(abs(t-a[l])<abs(t-a[r])) return a[l]; else return a[r]; } int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; a[0]=INT_MAX; cin>>m; while(m--){ cin>>q; cout<<find(q)<<"\n"; } return 0; }更简洁,自己写的
- 1
信息
- ID
- 241
- 时间
- ms
- 内存
- MiB
- 难度
- 2
- 标签
- 递交数
- 317
- 已通过
- 84
- 上传者