- 注意抓住共同的规律。
- 两个小根堆。
- \n可以确保程序通过
#include<bits/stdc++.h>
using namespace std;
//采用大根堆,小根堆的思想
int main(){
int T,N,M;
cin>>T;
string s,p;
while(T--){
cin>>N>>s>>M>>p;
//小根堆,这样最小位置的索引就在最左边,还可以动态维护(仅限,为0 到 1的时候动态调整)
priority_queue<int,vector<int>,greater<int>> seat0;
priority_queue<int,vector<int>,greater<int>> seat1;
for(int i =0;i< N;i++){
if(s[i]=='0'){
seat0.push(i+1);
}else if(s[i]=='1'){
seat1.push(i+1);
}
}
for(int i =0;i<M;i++){
if(p[i]=='M'){
if(!seat1.empty()){
int i = seat1.top();
seat1.pop();
cout<<i<<'\n';//可以节省时间
}else{
int i = seat0.top();
seat0.pop();
//然后做一个位置
seat1.push(i);
cout<<i<<'\n';//可以节省时间
}
}else{
if(!seat0.empty()){
int i = seat0.top();
seat0.pop();
//然后做一个位置
seat1.push(i);
cout<<i<<'\n';//可以节省时间
}else{
int i = seat1.top();
seat1.pop();
cout<<i<<'\n';//可以节省时间
}
}
}
}
return 0;
}