问题 M: 最亲密的x个人
Posted ~victor~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问题 M: 最亲密的x个人相关的知识,希望对你有一定的参考价值。
问题 M: 最亲密的x个人
时间限制: 1 Sec 内存限制: 128 MB提交: 412 解决: 38
[提交] [状态] [命题人:jsu_admin]
题目描述
有一天,地球受到了降维打击,从三维变成了一维。从此我们都生活在一条线上,给这条线加上坐标,每个点都是大于等于 0 的正整数。
有一天小明突发奇想,想知道谁是他最亲密的人,距离小明越近的人和小明越亲密。
假设有 N 个人,每个人的编号为 i(1 <= i <= N ),坐标为 ki(k[i-1] <= k[i] <= k[i+1]),小明的坐标为 M(小明是 N 个人中的一个),你们可以帮助小明找到他最亲密的 X个人的编号吗?
有一天小明突发奇想,想知道谁是他最亲密的人,距离小明越近的人和小明越亲密。
假设有 N 个人,每个人的编号为 i(1 <= i <= N ),坐标为 ki(k[i-1] <= k[i] <= k[i+1]),小明的坐标为 M(小明是 N 个人中的一个),你们可以帮助小明找到他最亲密的 X个人的编号吗?
输入
多组输入
对于每组数据,第一行为三个整数N(0<N<=100000 )、M(0<M<=100000000)、X(X <= N && X <= 100)
第二行有N个数,分别表示 N 个人的坐标
对于每组数据,第一行为三个整数N(0<N<=100000 )、M(0<M<=100000000)、X(X <= N && X <= 100)
第二行有N个数,分别表示 N 个人的坐标
输出
小明最亲密的 X 个人的编号(亲密度相同的,按id从小到大输出。如果第 x+1 个人和第 x 个人一样亲密,也需要输出)
样例输入 Copy
3 2 1
1 2 4
3 2 1
1 2 3
样例输出 Copy
1
1
3
定义一个结构体包含 x,id,dis dis 为到 m 的距离 然后排序,按距离小的排在前面, 距离相同 时编号小排前
输出前 x 个人即可,再判断第 x+1 个人的距离是否和第 x 个人一样,是的话输出,反 之不输出
1 #include <bits/stdc++.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstring> 6 #include<cstdio> 7 8 //#define DEBUG 9 #define RI register int 10 using namespace std; 11 typedef long long ll; 12 //typedef __int128 lll; 13 const int N=100000+10; 14 const int MOD=1e9+7; 15 const double PI = acos(-1.0); 16 const double EXP = 1E-8; 17 const int INF = 0x3f3f3f3f; 18 int t,n,m,k,q; 19 struct node{ 20 int id,x; 21 bool operator <(const node &S)const{ 22 if(x==S.x) 23 return id<S.id; 24 return x<S.x; 25 } 26 }a[N]; 27 int main() 28 { 29 30 while(scanf("%d%d%d",&n,&m,&k)!=EOF){ 31 for(int i=1;i<=n;i++){ 32 scanf("%d",&t); 33 a[i].id=i; 34 a[i].x=abs(t-m); 35 } 36 sort(a+1,a+n+1); 37 int cnt=0; 38 t=1; 39 while(cnt<k){ 40 if(a[t].x!=0){ 41 //cnt++; 42 q=a[t].x; 43 while(q==a[t].x&&cnt<=k){ 44 cout << a[t].id << endl; 45 t++; 46 cnt++; 47 } 48 }else{ 49 t++; 50 } 51 52 } 53 } 54 55 //cout << "Hello world!" << endl; 56 return 0; 57 }
以上是关于问题 M: 最亲密的x个人的主要内容,如果未能解决你的问题,请参考以下文章