zoukankan      html  css  js  c++  java
  • Team Queue(POJ 2259)

    题意:

    给定若干组数据,再给若干命令,模拟队列进出过程。要求,若进队列时,已有该组数据的其他数据,则放在该组最后进队列元素后面。

    思路:

    这题主要解决入队问题,如果只用一个队列表示team queue模拟的话,则在入队时会花费很多时间。因此用多个team个队列来表示team queue,再用一个

    队列来保存team前后队列id信息。然后加上一个flg来判断team是否有element在team queue中。

     1 #include <iostream>
     2 #include <string>
     3 #include <queue>
     4 #include <map>
     5 
     6 using namespace std;
     7 
     8 int nCaseNum,nNum;
     9 
    10 quene<long> nQue[1001];  //存储每个队列
    11 quene<int> nS;//存储队列号
    12 int nM[1000000]; //元素与队列号的映射表
    13 bool nFlag[1001]; //标识有无同组元素
    14 
    15 
    16 int main()
    17 {
    18  
    19  nCaseNum=0;
    20  
    21  while(cin>>nNum,nNum)
    22  {
    23     init();
    24     input();
    25     solve();
    26  }
    27  return 0;
    28 }
    29 
    30 void init()  //importent
    31 {
    32     for(int i=0;i!=nNum;i++)
    33     {
    34         nFlag[i]=false;
    35         while(!nQue[i].empty())
    36                 nQue[i].pop();
    37     
    38     }
    39     while(!nS.empty())
    40         nS.pop();
    41     
    42 }
    43 
    44 void input()
    45 {
    46     int nElem,eleNum;
    47     
    48     for(int i=0;i!=nNum;i++)
    49     {
    50         cin>>elemNum;
    51         for(int j=0;j!=elemNum;++j)
    52         {
    53             cin>>nElem;
    54             nM[nElem]=i;
    55         }
    56     }
    57 }
    58 
    59 void solve()
    60 {
    61     string nCommand;
    62     long nElem;
    63     cout<<"Scenario #"<<++nCaseNum<<endl;
    64     
    65     while(cin>>nCommand,nCommand!="STOP")
    66     {
    67         
    68         if(nCommand=="ENQUEUE")
    69         {
    70                 cin>>nElem;
    71                 if(!nFlag[nM[nElem])  //若还没有同组元素
    72                 {
    73                   nFlag[nM[nElem]]=true;
    74                   nS.push(nM[nElem]);  //组号入队列
    75                 }
    76                  nQue[nM[nElem]].push(nElem);
    77         }
    78         else if(nCommand=="DEQUEUE")
    79         {
    80             int nId=nS.front();  //首先处理最先进队列的那组元素
    81             cout<<nQue[nID].front()<<endl; 
    82             nQue[nId].pop();
    83             
    84             if(nQue[nId].empty())
    85             {
    86                 nS.pop();
    87                 nFlag[nId]=false;
    88             }
    89         }
    90        
    91     }
    92     cout<<endl;
    93 }
  • 相关阅读:
    NET开发中的事务处理大比拼
    gridview 导出Excel
    项目 心得
    设计模式Prototype原型模式
    设计模式Memento 备忘录模式
    设计模式Chain Of Responsibility 职责链模式
    设计模式Composite组合模式
    .NET常用功能和代码[总结与收藏]
    SQL SERVER函数——表值函数的处理
    设计模式学习笔记 简单工厂模式
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4711073.html
Copyright © 2011-2022 走看看