ZeroJudge M931: 遊戲選角

有 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

發佈留言