#include<iostream>
#include<queue>
#include<vector>
using namespace std;
vector<int> assignment(int T, int N, int M, string eatingPerson, string lineingPerson){
vector<int> ans(M);
priority_queue<int, vector<int>, greater<int>> que0;
priority_queue<int, vector<int>, greater<int>> que1;
priority_queue<int, vector<int>, greater<int>> que2;
for (int i = 0; i < N; ++i) {
if (eatingPerson[i] == '0') que0.push(i);
else if (eatingPerson[i] == '1') que1.push(i);
else que2.push(i);
}
for (int i = 0; i < M; ++i) {
int table;
if (lineingPerson[i] == 'M') {
if (!que1.empty()) {
table = que1.top() + 1;
que2.push(que1.top());
que1.pop();
}
else {
table = que0.top() + 1;
que1.push(que0.top());
que0.pop();
}
}
else {
if (!que0.empty()) {
table = que0.top() + 1;
que1.push(que0.top());
que0.pop();
}
else {
table = que1.top() + 1;
que2.push(que1.top());
que1.pop();
}
}
ans[i] = table;
}
return ans;
}
int main() {
int T = 0;
cin >> T;
while (T) {
int N, M;
string eat, line;
cin >> N;
cin >> eat;
cin >> M;
cin >> line;
vector<int> ans(M);
ans = assignment(T, N, M, eat, line);
for (int i = 0; i < ans.size(); ++i) {
cout << ans[i] << '\n';
}
--T;
}
system("pause");
return 0;
}
题目:公司食堂 方法:优先队列
最新推荐文章于 2024-07-12 16:34:36 发布