目錄
題目輸入輸出樣例題解思路題解原始碼(c/c++)
題目 :稱檢測點查詢
題目背景
2020 年 6 月 8 日,國務院聯防聯控機制發布《關于加快推進新冠病毒核酸檢測的實施意見》,提出對“密切接觸者”等八類重點人群“應檢盡檢”,其他人群“愿檢盡檢”,
問題描述
某市設有 n 個核酸檢測點,編號從 1 到 n,其中 i 號檢測點的位置可以表示為一個平面整數坐標 (xi, yi),為方便預約核酸檢測,請根據市民所在位置 ,查詢距其最近的三個檢測點,多個檢測點距離相同時,編號較小的視為更近,
輸入格式
輸入共 n+1 行,
第一行包含用空格分隔的三個整數 n、X 和 Y,表示檢測點總數和市民所在位置,
第二行到第 n+1 行依次輸入 n 個檢測點的坐標,第 i+1 行(1 <= i <= n)包含用空格分隔的兩個整數 xi 和 yi,表示 i 號檢測點所在位置,
輸出格式
輸出共三行,按距離從近到遠,依次輸出距離該市民最近的三個檢測點編號,
評測用例規模與約定
全部的測驗點滿足 3≤n≤200,所有坐標均為整數且絕對值不超過 1000,
輸入輸出樣例
輸入樣例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
題解思路
題目要求依次輸出距離該市民最近的三個檢測點編號,我們關心的只有距離和編號,創建一個只有距離和編號的結構體,最后進行排序,當距離不等的時候,距離最小的一個結構體在最前面,距離相等的時候,編號最小的在前面,
題解(c/c++)
#include<bits/stdc++.h>
using namespace std;
double distance(int a,int b,int x,int y)
{
return pow(x-a,2)+pow(y-b,2);
}
struct p_person
{
int flag_inputNum;//坐標,輸入的第幾個
double dis;
};
int main(void)
{
int n,X,Y;
struct p_person test[210]={0};
cin>>n>>X>>Y;
for (int i=0;i<n;i++)
{
int x,y;
cin>>x>>y;
test[i].flag_inputNum=i+1;
test[i].dis=distance(x,y,X,Y);
}
// 從小到大排序
for (int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(test[i].dis>test[j].dis)
{
struct p_person temp=test[i];
test[i]=test[j];
test[j]=temp;
}
else if(test[i].dis==test[j].dis)
{
if(test[i].flag_inputNum>test[j].flag_inputNum)
{
struct p_person temp=test[i];
test[i]=test[j];
test[j]=temp;
}
}
}
}
for(int i=0;i<3;i++)
{
cout<<test[i].flag_inputNum<<endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230608.html
標籤:其他
上一篇:安裝MMDetection
