ZeroJudge E839: 飲食分類 (Food)

小胖愛挑食,嗜吃高熱量的食物,導致他只長胖不長高。在日常生活中,我們需要各類食物的營養來維持身體健康,所以選擇食物時要考慮其營養價值及功能。

我們要為小胖打造一個分類各種飲食的篩選器,看看現有的食物中,能選擇那些食物來食用,才能均衡地補充營養。

範例測資

範例輸入範例輸出
第一行有一個正整數 N (1 <= N <= 50),代表現有的食物個數。接下來 N 行,每行各有兩個字串 F 與 S,彼此間以空白隔開。字串 F 代表該食物名稱 (食物名稱不重複),字串 S 代表該食物種類。最後一行 (第 N + 1 行) 有一字串 C,代表這次要搜尋的食物種類。(字串 F、S 和 C 不含空格,且字元數均不超過15個字元)對於每筆測資按照字典排序 (由小到大) 輸出屬於搜尋種類的食物名稱。若無該搜尋種類的食物則輸出「No」
2
apple fruit
milk drink
grains
No
5
pork meat
tea drink
fish meat
rice grains
beef meat
meat
beef
fish
pork

解題思路

宣告一個 Map<string, vector<string>>,當收到 F 和 S 時,使用 Map[S].push_back(F)

如果 Map[C].size() 為 0,則代表沒有種類為 C 的食物,輸出「No」。Else 的話就是先 Sort Map[C] 並跑一個 Map[C] 的 For迴圈,輸出 Map[C] 中的每一個字串。

範例程式碼-ZeroJudge E839: 飲食分類 (Food)

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

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    map<string, vector<string>>MAP;
    for (int i = 0; i<N; i++)
    {
        string a, b;
        cin >> a >> b;
        MAP[b].push_back(a);
    }
    string target;
    cin >> target;
    if (MAP[target].size() == 0) cout << "No\n";
    else
    {
        vector<string>ans = MAP[target];
        sort(ans.begin(), ans.end());
        for (int i = 0; i<ans.size(); i++)
        {
            cout << ans[i] << "\n";
        }
    }
}

//ZeroJudge E839
//Dr. SeanXD

發佈留言