题解 | #公司食堂#

公司食堂

http://www.nowcoder.com/practice/601815bea5544f389bcd20fb5ebca6a8

  1. 注意抓住共同的规律。
  2. 两个小根堆。
  3. \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;
}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

评论
8
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务