1. 程式人生 > 其它 >小白能看懂的csp202009-1稱檢測點查詢100分答案

小白能看懂的csp202009-1稱檢測點查詢100分答案

技術標籤:cspc++

題目背景

2020 年 6 月 8 日,國務院聯防聯控機制釋出《關於加快推進新冠病毒核酸檢測的實施意見》,提出對“密切接觸者”等八類重點人群“應檢盡檢”,其他人群“願檢盡檢”。

問題描述

某市設有n個核酸檢測點,編號從1到n,其中i號檢測點的位置可以表示為一個平面整數座標 (xi,yi)。為方便預約核酸檢測,請根據市民所在位置(X,Y),查詢距其最近的三個檢測點。
多個檢測點距離相同時,編號較小的視為更近。

輸入格式

輸入共 n+1行。
第一行包含用空格分隔的三個整數n,X,Y,表示檢測點總數和市民所在位置。
第二行到第n+1行依次輸入 n個檢測點的座標。第i+1行(1<=i<=n)包含用空格分隔的兩個整數 xi和yi,表示 i號檢測點所在位置。

輸出格式

輸出共三行,按距離從近到遠,依次輸出距離該市民最近的三個檢測點編號。

樣例輸入1

3 2 2
2 2
2 3
2 4

樣例輸出1

1
2
3

樣例輸入2

5 0 1
-1 0
0 0
1 0
0 2
-1 2

樣例輸出2

2
4
1

樣例2解釋

在這裡插入圖片描述

評測用例規模與約定

全部的測試點滿足,3≤n≤200,所有座標均為整數且絕對值不超過 1000。

提示

市民到第 i號檢測點的距離 Di可由如下公式算出:
在這裡插入圖片描述

程式碼

#include<iostream>
#include<math.h>
using namespace std;
#define N 201
int main(){
    int
n,X,Y; int i,j; int d[N];//距離 int s[N];//編號 int x[N],y[N]; int t1,t2; cin>>n>>X>>Y; for(i=0;i<n;i++){ cin>>x[i]>>y[i]; d[i]=pow(X-x[i],2)+pow(Y-y[i],2);//計算距離 s[i]=i; } //對d[i]陣列進行排序,此處用到氣泡排序 for(i=0;i<n;i++){
for(j=i+1;j<n;j++){ if(d[i]>d[j]){//距離交換時,編號也一起交換 t1=d[i]; d[i]=d[j]; d[j]=t1; t2=s[i]; s[i]=s[j]; s[j]=t2; } //當距離一樣時,輸出編號小的 if(d[i]==d[j]){ if(s[i]>s[j]){ t1=s[i]; s[i]=s[j]; s[j]=t1; } } } } for(i=0;i<3;i++){ cout<<s[i]+1<<endl; } return 0; }

一個菜鳥的答案,還在學習中