題目敘述
每筆測資第一行有一個正整數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++;
}
}
}
留言
張貼留言