#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;
}
题目:公司食堂 方法:优先队列
最新推荐文章于 2025-12-03 14:22:43 发布
本文介绍了一个餐桌分配算法,该算法使用优先级队列来为就餐人员分配合适的餐桌,确保每个人都能找到一个符合其偏好的座位。具体实现中,根据不同就餐偏好将顾客分配到不同状态的餐桌上,最终输出每个顾客被分配到的餐桌编号。
1848

被折叠的 条评论
为什么被折叠?



