zoukankan      html  css  js  c++  java
  • POJ-2259 Team Queue(模拟+队列)

    http://poj.org/problem?id=2259

    题意:

    在组队队列中,每个元素属于一个队伍。如果一个元素将要进入组队队列时,会从头到尾找它的队友是否已经在队列中,如果找到了,他就会紧随其后进入队伍。如果没有找到,则它会从队列末尾入队,并成为自己队列的第一个元素。出队操作则和普通队列一样:元素在组队队列中按从头到尾的顺序出列

    思路:

    解决入队问题,如果用一个队列模拟,时间太大,

    用team个队列来表示team queue,再用一个队列来保存team前后的信息,再加上一个Flag来标记team是否有元素在team queue中。

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string>
    #include<iomanip>
    #include<algorithm>
    #include<string.h>
    #include<queue>
    #include<cmath>
    #include<stack>
    
    using namespace std;
    const int maxn=1e5+10;
    const int inf=1e10;
    typedef long long ll;
    
    queue<ll> nQue[1001];
    queue<int> nS;
    int nM[1000000];
    bool nFlag[1001];
    int nCase=0;
    int nNum=0;
    
    void solve()
    {
        string nCommand;
        ll nElem;
        cout<<"Scenario #"<<++nCase<<endl;
        while(cin>>nCommand,nCommand!="STOP")
        {
            if(nCommand=="ENQUEUE")
            {
                cin>>nElem;
                if(!nFlag[nM[nElem]])
                {
                    nFlag[nM[nElem]]=true;
                    nS.push(nM[nElem]);
                }
                nQue[nM[nElem]].push(nElem);
            }
            else if(nCommand=="DEQUEUE")
            {
                int nID=nS.front();
                cout<<nQue[nID].front()<<endl;
                nQue[nID].pop();
                if(nQue[nID].empty()){
                    nS.pop();
                    nFlag[nID]=false;
                }
            }
        }
        cout<<endl;
    }
    
    void init()
    {
        for(int i=0; i!=nNum; i++){
            nFlag[i]=false;
            while(!nQue[i].empty()) nQue[i].pop();
        }
        while(!nS.empty()) nS.pop();
    }
    
    void input()
    {
        int nElem,elemNum;
        for(int i=0; i!=nNum; i++)
        {
            cin>>elemNum;
            for(int j=0; j!=elemNum; ++j)
            {
                cin>>nElem;
                nM[nElem]=i;
            }
        }
    }
    
    int main()
    {
        while(cin>>nNum,nNum)
        {
            init();
            input();
            solve();
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    react 采坑记录
    理解JS 模块化
    MongoDB使用教程
    scss
    gulp 使用教程
    node.js 简单入门
    jQuery
    jQuery
    php+mysql+bootstrap 实现成绩管理系统
    SVN的commit功能用bat实现
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/14337354.html
Copyright © 2011-2022 走看看