ZeroJudge I918: I Love Pizza

同題:UVa 12626 – I Love Pizza

每個人都喜歡各種披薩: Margarita、Four cheese、Salami、Caprichosa、Neapolitan、Hawaiian …。

著名的比薩瑪格麗塔是以意大利薩沃伊女王瑪格麗塔命名的。據說主廚拉斐爾·埃斯波西托 (Raffaele Esposito) 讓她從他專門為女王準備的各種披薩中選擇。瑪格麗塔選擇這款披薩是為了紀念意大利國旗的顏色:紅番茄、白奶酪和綠色羅勒。
然而,有人爭辯說,事實上,瑪格麗塔王后不喜歡洋蔥,而且其他披薩都有洋蔥,她別無選擇,只能吃那個披薩。
在我們特殊的電腦化廚房中,食材以大寫字母命名:「A」、「B」、「C」、「D」、…。
因此,要製作瑪格麗塔披薩,我們需要與字母一樣多的成分,即一個「M」、三個「A」、兩個「R」、一個「G」、一個「I」、和一個「T」

例如,如果我們有以下成分:

AAAAAAMMRRTITIGGRRRRRRRR

我們可以做 2 個 MARGARITA 披薩,還可以留出一些「R」。
給定一組配料,你必須說出可以製作多少個瑪格麗塔披薩。請注意,可能有剩餘成分,也可能有不必要的成分,例如「B」。

範例測資

範例輸入範例輸出
第一行有一個數字 N 代表測試資料數量
接下來 N 行,每行代表現有成分,成分只包含大寫英文字母 A ~ Z
一行最多 600 個字母
對於每組測試資料
輸出可以製作多少「MARGARITA」披薩
5
MARGARITA
AAAAAAMMRRTITIGGRRRRRRRR
AMARGITA
BOLOGNESACAPRICHOSATOMATERA
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1
2
0
1
0

解題思路

宣告一個 Map<char, int> 來紀錄每一個字元出現的次數。之後對「M」、「A」、「R」、「G」、「I」、「T」這六個字母的 Map 值做除法,除以他們製作一個 Pizza 所需的數量,並且在除完之後判斷 Map 值最小的數字,即是答案。

範例程式碼-ZeroJudge I918: I Love Pizza

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

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    char pizza[6] = {'M', 'A', 'R', 'G', 'I', 'T'};
    int usage[6] = {1, 3, 2, 1, 1, 1};
    for (int i = 0; i<N; i++)
    {
        map<char, int>MAP;
        string str;
        cin >> str;
        for (int j = 0; j<str.length(); j++)
        {
            MAP[str[j]]++;
        }
        int min = -1;
        for (int j = 0; j<6; j++)
        {
            MAP[pizza[j]] /= usage[j];
            if (MAP[pizza[j]] < min || min == -1) min = MAP[pizza[j]];
        }
        cout << min << "\n";
    }
}

//ZeroJudge I918
//Dr. SeanXD

發佈留言