【基础】海岛寻宝
时间限制: 1.000 Sec 内存限制: 16 MB
题目描述
某个海岛上埋藏着多件宝物,每件宝物都有一个确切的位置,宝物的位置用一对数(x,y)来表示。其中 x表示该宝物离海洋中某个指定地点的水平距离,y表示该宝物离海洋中某个指定地点的垂直距离。已知宝物离海洋某个指定地点的直线距离L可以由如下公式计算:
海洋探险队的任务是:找出名称包含某种特征字符串的所有宝物,并按直线距离由近到远的顺序把它们的位置记录下来,以方便将来取出宝物。假若你是海洋探险队的一员,你能编程完成这一工作吗?
输入
共有n+2行。
第1行为要寻宝物的特征字符串;
第2行为岛上的宝物数n( 0 < n <= 100 );
第3行至第n+2行为每件宝物的位置数据和宝物名称。
输出
按距离由近到远输出所找到宝物的位置,每件宝物的位置数据占一行。若找不到宝物,则全以“-1”输出(输出n个-1)。
样例
输入1 复制
ep
2
1.5 2.8 goden
2.4 5 word
输出1 复制
-1 -1
输入2 复制
ner
3
5 2.4 liner
2.5 8.3 suerp
1.5 2 winervis
输出2 复制
1.5 2
5 2.4
错误代码:
#include <bits/stdc++.h>
using namespace std;
struct ikun {
double x;
double y;
string name;
};
bool compareDistance(const ikun& t1, const ikun& t2) {
return sqrt(pow(t1.x, 2) + pow(t1.y, 2)) < sqrt(pow(t2.x, 2) + pow(t2.y, 2));
}
int main() {
string feature;
int n;
cin >> feature >> n;
vector<ikun> treasures(n);
for (int i = 0; i < n; i++) {
cin >> treasures[i].x >> treasures[i].y >> treasures[i].name;
}
vector<ikun> foundTreasures;
for (const auto& treasure : treasures) {
if (treasure.name.find(feature) != string::npos) {
foundTreasures.push_back(treasure);
}
}
if (foundTreasures.empty()) {
cout << "-1 -1" << endl;
} else {
sort(foundTreasures.begin(), foundTreasures.end(), compareDistance);
for (const auto& treasure : foundTreasures) {
cout << treasure.x << " " << treasure.y << endl;
}
}
return 0;
}