zoukankan      html  css  js  c++  java
  • 数据结构:队列

      例题:POJ - 2259  (http://poj.org/problem?id=2259

      题目大意:在队伍中,一个元素要入队,先会看看队伍中有没有跟它同队的队友,如果有,它会直接插在队友的后面,如果没有,那就插在整个队伍后面。出队时,整个队伍从头到尾出列。就好像我们平时排队一样,先看看队里有没有熟人,有熟人就排在熟人后面,没有熟人就自己乖乖的排在队伍的尾部。

      思路:如果只用一个队列,那么入队时候的操作很复杂。所以,我们为每一支队伍(“熟人”)都开一个队列,然后再用一个队列来保存队伍的编号,用一个数组m[]表示元素与队伍号的关系,用一个数组f[]表示有无同队元素。(PS:运用C++的STL吧!非常方便!都不用自己写啦!~)

      代码:http://paste.ubuntu.com/16316998/

     1 #include <iostream>
     2 #include <string>
     3 #include <queue>
     4 using namespace std;
     5 int casenum,num,eNum,elem;
     6 queue<int>    que[1001];        //每个队列的元素
     7 queue<int>    qnum;            //队列编号
     8 int m[1000000];                //元素和队列号的映射
     9 int f[1001];                //有无同队元素
    10 
    11 void solve()
    12 {
    13     string com;
    14     int e;
    15     cout<<"Scenario #"<<++casenum<<endl;
    16     while(cin>>com && com != "STOP")
    17     {
    18         if(com == "ENQUEUE")
    19         {
    20             cin>>e;
    21             if(!f[m[e]])
    22             {
    23                 f[m[e]] = 1;
    24                 qnum.push(m[e]);
    25             }
    26             que[m[e]].push(e);
    27         }
    28         else
    29         {
    30             int nq = qnum.front();
    31             cout<<que[nq].front()<<endl;
    32             que[nq].pop();
    33             if(que[nq].empty())
    34             {
    35                 qnum.pop();
    36                 f[nq] = 0;
    37             }
    38         }
    39     }
    40     cout<<endl;
    41 }
    42 void init()                    //初始化
    43 {
    44     for(int i=0;i<num;i++)
    45     {
    46         f[i] = 0;
    47         while(!que[i].empty())    que[i].pop();
    48     }
    49     while(!qnum.empty())    qnum.pop();
    50 }
    51 int main()
    52 {
    53     int i,j;
    54     casenum = 0;
    55     while(cin>>num && num)
    56     {
    57         init();
    58         for(i=0;i<num;i++)
    59         {
    60             cin>>eNum;
    61             for(j=0;j<eNum;j++)
    62             {
    63                 cin>>elem;
    64                 m[elem] = i;
    65             }
    66         }
    67         solve();
    68     }
    69 }
  • 相关阅读:
    hibernate常用查询语句动态生成类(包括条件和无条件查询)
    Eclipse常用插件更新下载地址列表
    IT相关网站列表
    /etc/目录下的passwd文件内容详解
    关于jfreechart创建web报表图片的流程初解
    博客地址列表
    java编码转换的详细过程 (转)
    偿债
    汽车变速器(自动挡)英文缩写
    Firefox 快捷键列表
  • 原文地址:https://www.cnblogs.com/GodA/p/5475084.html
Copyright © 2011-2022 走看看