编程俱乐部为了准备开学的社团活动,需要采购活动物品,mxj联系某条街上的n个人,该条街长度为L,一共有m家店。
现在这n个人想知道距离自己最近的店距离是多少,请你求出来。
第一行,两个空格隔开的正整数,L, m, 题意如上。
接下来m行,每行一个正整数,表示店铺位置。
第m+1行,一个正整数n,代表人数。
接下来n行,每行一个正整数,代表第i个人所处的位置Pi。
输出n行,代表每个人距离自己最近店的路程。
3 1
1
3
1
2
3
0
1
2
1≤L≤109
1≤m≤105
1≤n≤105
且m≤n。
#include<stdio.h>
#include<algorithm>
using namespace std;
int L,m,n,a,b,P;
int arr[100005];
int main()
{scanf("%d%d",&L,&m);for(int i=1; i<=m; i++){scanf("%d",&arr[i]);}sort(arr+1,arr+m+1);scanf("%d",&n);for(int i=1; i<=n; i++){int mid=1;scanf("%d",&P);int x=1,y=m;b=m;while(x<=y) //直接二分{mid=(x+y)/2;if(arr[mid]>=P){b=mid;y=mid-1;}else x=mid+1;}if(m==1) //分情况输出。{printf("%dn",abs(P-arr[1]));}else{if(b==1)printf("%dn",abs(P-arr[b]));elseprintf("%dn",min(abs(P-arr[b]),abs(P-arr[b-1])));}}return 0;
}
本文发布于:2024-02-01 14:41:23,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170676968437327.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |