吉首大学第八届“新星杯”M题(网赛)http://120.78.162.102/problem.php?cid=1433&pid=12
有一天,地球受到了降维打击,从三维变成了一维。从此我们都生活在一条线上,给这条线加上坐标,每个点都是大于等于 0 的正整数。
有一天小明突发奇想,想知道谁是他最亲密的人,距离小明越近的人和小明越亲密。
假设有 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 个人的坐标
输出
小明最亲密的 X 个人的编号(亲密度相同的,按id从小到大输出。如果第 x+1 个人和第 x 个人一样亲密,也需要输出)
样例输入 Copy
3 2 1 1 2 4 3 2 1 1 2 3
样例输出 Copy
1 1 3
哇 这题不难 或者说有点水
但是我比赛的时候居然没去看
下意识的认为这题写的人好少 肯定很难
哇 难受
赛后补题的时候才发现哇 这题....
首先 审题要清楚(坑)
1.他要输出的是编号
2.只有x个数 或者x+1个数(坑)
然后这题一个排序就写完了
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
struct aa
{long long int x,y,z;
}a[100005];
bool cmp(aa a,aa b)//排序 亲密度从小到大
{if(a.y!=b.y)return a.y<b.y;return a.x<b.x;
}
long long int n,m,x;
int main()
{while(cin>>n>>m>>x){memset(a,0,sizeof(a));for(int i=1;i<=n;i++){cin>>a[i].x;//输入 a[i].z=i;//编号 a[i].y=abs(a[i].x-m);//亲密度 }sort(a+1,a+1+n,cmp);//排序 for(int i=2;i<=x+1;i++)//第一个数肯定是他自己 从第二个数开始的一共x个数 {cout<<a[i].z<<endl;}if(a[x+1].y==a[x+2].y)//判断一下第x+1个数和x+2个数是不是相等 相等就要输出(只要判一个....) cout<<a[x+2].z<<endl;}return 0;
}