问题描述
试题编号: 202009-1
试题名称: 称检测点查询
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
题目背景
2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”,其他人群“愿检尽检”。
问题描述
某市设有 个核酸检测点,编号从 到 ,其中 号检测点的位置可以表示为一个平面整数坐标
。
为方便预约核酸检测,请根据市民所在位置 ,查询距其最近的三个检测点。
多个检测点距离相同时,编号较小的视为更近。
输入格式
输入共 行。
第一行包含用空格分隔的三个整数 、 和 ,表示检测点总数和市民所在位置。
第二行到第 行依次输入 个检测点的坐标。第 行()包含用空格分隔的两个整数
和
,表示 号检测点所在位置。
输出格式
输出共三行,按距离从近到远,依次输出距离该市民最近的三个检测点编号。
样例输入1
3 2 2
2 2
2 3
2 4
Data
样例输出1
1
2
3
Data
样例输入2
5 0 1
-1 0
0 0
1 0
0 2
-1 2
Data
样例输出2
2
4
1
Data
样例2解释
p1.png
评测用例规模与约定
全部的测试点满足,,所有坐标均为整数且绝对值不超过 。
提示
市民到第 号检测点的距离
可由如下公式算出:
满分代码:
#include <bits\stdc++.h>
#include <climits>
//#include <iostream>
//#include <cstdio>
#include <cmath>
//#include <stdlib.h>
using namespace std;
//unsigned int zero=0;
//const int INT_MAX_ = (~zero)/2;
int distance(int X,int Y,int x,int y)
{
return pow(x-X,2)+pow(y-Y,2);
// return (x-X)*(x-X)+(y-Y)*(y-Y);
}
int main()
{
int n,X,Y;
cin>>n>>X>>Y;
int dx=0,dy=0,fir=-1,sec=-1,thd=-1,temp=-1,min0=INT_MAX,min1=INT_MAX,min2=INT_MAX;
/*int dx=0,dy=0,fir=-1;
//int dx=0;int dy=0;int fir=-1;
int sec=-1;int thd=-1;
int temp=-1;
int min0=INT_MAX_;int min1=INT_MAX_;int min2=INT_MAX_;
*/
for(int i=1;i<=n;++i)
{
cin>>dx>>dy;
temp=distance(X,Y,dx,dy);
if(temp<min0)
{
thd=sec;
sec=fir;
fir=i;
min2=min1;
min1=min0;
min0=temp;
continue;
}
else if(temp<min1)
{
thd=sec;
sec=i;
min2=min1;
min1=temp;
continue;
}
else if(temp<min2)
{
thd=i;
min2=temp;
continue;
}
}
cout<<fir<<endl<<sec<<endl<<thd;
}
这个题本身不难,就是CCF CSP的OJ中提示编译出错,我本地运行是没有问题的。
我以为是自己对C++标准掌握不熟,一直不断的尝试修改代码…更换头文件,怀疑是不是对limts不支持…又更换全局变量…
改到后面发现,也许是
int dx=0,dy=0,fir=-1,sec=-1,thd=-1,temp=-1,min0=INT_MAX,min1=INT_MAX,min2=INT_MAX;
这一句出了问题,我拆成
int dx=0,dy=0,fir=-1;
//int dx=0;int dy=0;int fir=-1;
int sec=-1;int thd=-1;
int temp=-1;
int min0=INT_MAX_;int min1=INT_MAX_;int min2=INT_MAX_;
就好了。
好了之后,我发现原来的写法也能过编译了…所以最终无法确定出是哪里的问题,在此记录留下一个思路给同样踩坑的同志们思考~