
改一下输入输出格式,输入n,m,表示n个房屋,m个供暖器,接下来输入n个整数和m个整数。输出一个整数,表示最小的供暖半径。
1 变量定义
1)a数组:存储房屋的位置
2)h数组:存储供暖器的位置
3)l变量:停留在a数组
4)r变量:停留在h数组
5)minn变量:定义为房屋到供暖器的最小距离
6) ans变量:定义为找到的最小半径
2 算法流程
l遍历a数组的元素,初始化minn=abs(a[l]-h[r]),如果r+1<=m && minn >= abs(a[l]-h[r+1]),则更新minn,r++。最好通过max(minn,ans)找到最终的ans。
3代码实现
cpp
#include<bits/stdc++.h>
using namespace std;
int l,r,n,m;
int a[100005],h[100005];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>h[i];
sort(a+1,a+n+1);
sort(h+1,h+m+1);
l=1;
r=1;
int ans=0;
for(int i=1;i<=n;i++){
l=i;
int minn=abs(h[r]-a[l]);
while(r+1<=m&&abs(h[r+1]-a[l])<=minn){
minn=abs(h[r+1]-a[l]);
r++;
}
ans=max(ans,minn);
}
cout<<ans;
return 0;
}