ZeroJudge F818: 物競天擇 (Survival)

「物競天擇、適者生存」是大自然的殘酷競爭法則,以獅子為例,每一頭獅子都想要從獅群中脫穎而出,成為獅王。小獅子的母親在每一隻小獅子出生後,會選擇性地培養那些強壯的小獅子,母獅會把自己的精力和食物都給予這些天生就有優勢的小獅子身上,因為牠們更有機會成為未來的獅王。而天生比較弱小的獅子,不僅受到母親的忽視、同伴的排擠,還有可能直接被母親拋棄。

為了保護弱小的獅子,人們想要在小獅子生下後預先把會被獅子媽媽遺棄的小獅子帶回城市由人類保育。他們觀察的方式是以每隻小獅子的體重 (公斤) 乘以身高 (公分) 來比較,將數值最小的那位小獅子帶回保護。請你幫忙寫一個程式完成此項保護小獅子的行動。

範例測資

範例輸入範例輸出
輸入第一行為一個整數 N (2 ≤ N ≤ 2000) 代表小獅子的總數,第二行共有共有 N 個整數表示每隻獅子的身高 Hi (1 ≤ Hi ≤ 1000,1 ≤ i ≤ N),第三行有 N 個整數表示每隻獅子的體重 Wi (1 ≤ Wi ≤ 1000,1 ≤ i ≤ N)。輸出一行為要帶走的小獅子的身高與體重,兩數中間以空白格隔開。測資
保證只會有一隻小獅子有最小的體重-身高乘積
2
145 34
21 55
34 55
4
361 619 555 855
419 758 549 240
361 419
5
17 100 40 111 68
157 151 25 173 197
40 25

解題思路

使用 陣列/Vector 先將身高的數值記錄下來,在收體重的資料時直接做乘法並判斷最小值。可以先把第一個獅子的體重設為最小值變數的初始值。

範例程式碼-ZeroJudge F818: 物競天擇 (Survival)

#include <iostream>
#include <vector>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    vector<long long int>height;
    for (int i = 0; i<N; i++)
    {
        long long int tmp;
        cin >> tmp;
        height.push_back(tmp);
    }
    long long int min, ans_h, ans_w;
    for (int i = 0; i<N; i++)
    {
        long long int weight;
        cin >> weight;
        long long int calc = weight * height[i];
        if (i == 0)
        {
            min = weight * height[i];
            ans_h = height[i];
            ans_w = weight;
        }
        if (calc < min)
        {
            min = calc;
            ans_h = height[i];
            ans_w = weight;
        }
    }
    cout << ans_h << " " << ans_w << endl;
}

//ZeroJudge F818
//Dr. SeanXD

發佈留言