- 注意抓住共同的规律。
- 两个小根堆。
- \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; }