ZeroJudge E520: Rockabye Tobby

題目敘述

每筆測資第一行有一個正整數N,代表接下來會有N筆資料。每筆資料第一行有兩個正整數M和K,代表醫生開了M種藥和需要服用K個藥物才會好起來,接下來會有M行,每行會有一個字串代表藥物的名稱及一個正整數代表這個藥物服用的頻率,先輸入的藥物的優先級就越高。要求輸出每次服用藥物的時間和藥物名稱直到病情好起來為止,如果有同一時間需要服用超過一種藥物時,優先輸出優先級較高的藥物。


範例輸入 #1

1

2 5

Acetaminophen 20

Loratadine 30

範例輸出 #1

20 Acetaminophen

30 Loratadine

40 Acetaminophen

60 Acetaminophen

60 Loratadine


解題思路

使用Vector和Pair將藥物的名稱及服用頻率存起來,並用While迴圈來判斷目前的時間是否有需要服用的藥物 (可以被服用頻率整除)。需要注意的是只要服用了一種藥物就需要判斷目前服用的藥物數量是否有等於K,如果有的話就需要將迴圈Break掉。

解題程式碼如下 (僅供參考):

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

pair<string, int> rtn (string name, int time)
{
    pair<string, int>tmp;
    tmp.first = name;
    tmp.second = time;
    return tmp;
}

int main() {
    int N;
    cin >> N;
    for (int i = 0; i<N; i++)
    {
        int med, K;
        cin >> med >> K;
        vector<pair<string, int>>v;
        for (int j = 0; j<med; j++)
        {
            string name;
            int time;
            cin >> name >> time;
            v.push_back(rtn(name, time));
        }
        int count = 0, j = 1;
        while (count < K)
        {
            for (auto it:v)
            {
                if (j % it.second == 0)
                {
                    cout << j << " " << it.first << "\n";
                    count++;
                    if (count >= K) break;
                }
            }
            j++;
        }
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天