CCF 202009-1 稱檢測點查詢 (100分)
阿新 • • 發佈:2020-12-28
題庫連結:https://blog.csdn.net/weixin_43905586/article/details/88404105
測試連結:http://cspro.org/
用時:1小時
分享名言一句
Knowledge is from work, any achievement is the crystallization of hard work. -- Song Qingling
知識是從勞動中得來的,任何成就都是刻苦勞動的結晶。——宋慶齡
問題描述
試題編號: | 202009-1 |
試題名稱: | 稱檢測點查詢 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 題目背景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 Data 樣例輸出1 Data 樣例輸入2 Data 樣例輸出2 Data 樣例2解釋評測用例規模與約定全部的測試點滿足,3≤n≤200,所有座標均為整數且絕對值不超過1000。 提示市民到第i號檢測點的距離Di可由如下公式算出: |
鄙人拙見:
- 首先按要求輸入n,X,Y
- 利用公式分別求出市民與多個監測點的距離並對每個監測點編號
- 將距離按從小到大排序,注意把編號也帶上
- 若距離相等,則優先輸出小值
- 最後按序輸出前三位
C++參考程式碼1.0:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,X,Y;
scanf("%d %d %d",&n,&X,&Y);
int a[n][2];
for(int i = 0; i < n; i++)
{
for(int j = 0; j < 2; j++)
{
scanf("%d",&a[i][j]);
}
}
float distance[n];
int flag[n];
for(int i = 0; i < n; i++)
{
float sum;
sum = abs(a[i][0] - X)*abs(a[i][0] - X) + abs(a[i][1] - Y)*abs(a[i][1] - Y);
distance[i] = sqrt(sum);
flag[i] = i + 1;
}
for(int i = 0; i < n; i++)
{
for(int j = i + 1; j < n; j++)
{
float temp;
int t;
if(distance[j] < distance[i])
{
temp = distance[i];
distance[i] = distance[j];
distance[j] = temp;
t = flag[i];
flag[i] = flag[j];
flag[j] = t;
}
if(distance[j] == distance[i])
{
if(flag[i] > flag[j])
{
t = flag[i];
flag[i] = flag[j];
flag[j] = t;
}
}
}
}
for(int i = 0; i < 3; i++)
{
printf("%d\n",flag[i]);
}
return 0;
}