• 洛谷P2776 [SDOI2007]小组队列题解


    题目传送门

    对于新手难度适宜的一个数据结构题

    题面简述

    将一个队列分为若干个组,组内的成员入队时直接插入到小组后面,队内无小组成员时插入到队尾。

    有两种操作:(push)(pop)(具体操作和队列一样,是针对大队列的)

    思路

    模拟

    代码思路简述

    用大数组存储每个元素的组别。

    用若干个小队列和一个大队列来模拟:

    大队列存放小组的排名,小组没人就弹出队首小组;

    每个小队列放组员顺序,在压入组员时,直接压入在对应小组的队列后面,弹出直接弹出队首组员。

    代码

    #include<iostream>
    #include<queue>
    using namespace std;
    queue<int> q[305];//各个小组
    int b[100005];//组员所在的组
    queue<int> all;//大队
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=0;i<n;i++)
            cin>>b[i];
        int t;
        cin>>t;
        while(t--)
        {
            string temp;
            cin>>temp;
            if(temp=="pop")
            {
                cout<<q[all.front()].front()<<endl;//输出小组的队首
                q[all.front()].pop();//弹出小组队首
    			if(q[all.front()].empty())
                    all.pop();//小组没人了就在大队中将小组弹出
            }
            else
            {
                int x;
                cin>>x;
                if(q[b[x]].empty())
                    all.push(b[x]);//如果大队中没有所在小组就连同小组排在队尾
                q[b[x]].push(x);//在小组中压入组员
            }
        }
        return 0;
    }
    

    完结撒花 (。・∀・)ノ花花花

    我要拿金牌!
  • 相关阅读:
    fenby C语言P21
    fenby C语言 P20
    fenby C语言 P19
    fenby C语言 P18
    fenby C语言 P17
    fenby C语言 P16
    fenby C语言 P15
    fenby C语言 P14
    Python学习之路:subprocess模块和面向对象
    Python学习之路:XML模块
  • 原文地址:https://www.cnblogs.com/jerrywang-blogs/p/14900392.html
Copyright © 2020-2023  润新知