有 N 個角色,每個角色有攻擊力和防禦力。
角色的能力值是攻擊力和防禦力的平方和,輸出能力值第二大的攻擊力和防禦力數值。
保證每個角色的能力值相異。
範例測資
範例輸入 | 範例輸出 |
---|---|
第一行包含一個整數 N (3 <= N <= 20),表示有多少個角色。 接下來的 N 行,每行包含兩個整數 ai 和 bi (1 <= ai, bi <= 100),表示第 i 個角色的攻擊力和防禦力。 | 輸出兩個整數,表示能力值第二大的角色的攻擊力和防禦力。 |
3 3 1 5 2 1 4 | 1 4 |
6 6 6 1 3 8 6 5 4 2 8 7 2 | 6 6 |
5 34 35 84 32 39 79 59 89 59 31 | 84 32 |
解題思路
可以將 a 和 b 的平方和存到一個 陣列/Vector 中並使用 Sort 來排序,同時,因為不會有平方和相同的情況出現,可以利用 Map 來將 a 和 b 存起來,Key 值就使用 a 和 b 的平方和,Map 的 Value 可以使用 Pair<int, int> 來將 a 和 b 存在一起。輸出的時候選擇第二大的平方和,輸出其存在 Map 中的 a 和 b。
範例程式碼-ZeroJudge M931: 遊戲選角
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
vector<int>num;
map<int, pair<int, int>>MAP;
for (int i = 0; i<N; i++)
{
int a, b;
cin >> a >> b;
int tmp = (a*a) + (b*b);
num.push_back(tmp);
MAP[tmp].first = a;
MAP[tmp].second = b;
}
sort(num.begin(), num.end());
int tmp = num[num.size()-2];
cout << MAP[tmp].first << " " << MAP[tmp].second << "\n";
}
//ZeroJudge M931
//Dr. SeanXD