刚开始用队列实现的,多了排序,怎么都超时,看来别人的思路,用了优先队列,立马就过了。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstdlib>
#include <vector>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t, n, m;
string d;
string p;
cin >> t;
while (t--)
{
cin >> n >> d >> m >> p;
// 优先级队列(小根堆)
priority_queue<int,vector<int>,greater<int>> zero, one;
for (int j = 0; j < n; j++)
{
if (d[j] == '0')
{
zero.push(j + 1);
}
else if (d[j] == '1')
{
one.push(j + 1);
}
}
for (int i = 0; i < m; i++)
{
if (p[i] == 'M')
{
// 如果没有仅一人的座位
if (one.empty())
{
cout << zero.top() << '\n';
one.push(zero.top());
zero.pop();
}
else
{
cout << one.top() << '\n';
one.pop();
}
}
else
{
// 如果没有空位置
if (zero.empty())
{
cout << one.top() << '\n';
one.pop();
}
else
{
cout << zero.top() << '\n';
one.push(zero.top());
zero.pop();
}
}
}
}
}