刚开始用队列实现的,多了排序,怎么都超时,看来别人的思路,用了优先队列,立马就过了。

#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();
                }
            }
        }
    }
}