zoukankan      html  css  js  c++  java
  • luogu P2776 [SDOI2007]小组队列

    题目背景

    嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有!

    这么简单的题怎么可以没有!

    给大家提升士气是义不容辞的责任!

    所以我就来补一下啦..

    值得一提的是,标程是我自己做的..

    很渣,因为数据很水所以能AC..

    大神勿喷..

    题目描述

    有 m 个小组, n 个元素,每个元素属于且仅属于一个小组。

    支持以下操作:

    push x:使元素 x 进队,如果前边有 x 所属小组的元素,x 会排到自己小组最后一个元素的下一个位置,否则 x 排到整个队列最后的位置。

    pop:出队,弹出队头并输出出队元素,出队的方式和普通队列相同,即排在前边的元素先出队。

    输入输出格式

    输入格式:

    第一行有两个正整数 n, m,分别表示元素个数和小组个数,元素和小组均从 0 开始编号。

    接下来一行 n 个非负整数 Ai,表示元素 i 所在的小组。

    接下来一行一个正整数 T ,表示操作数。

    接下来 T 行,每行为一个操作。

    输出格式:

    对于每个出队操作输出一行,为出队的元素。

    输入输出样例

    输入样例#1:
    4 2
    0 0 1 1
    6
    push 2
    push 0
    push 3
    pop
    pop
    pop
    输出样例#1:
    2
    3
    0

    说明

    对于30%的数据,1≤n≤100,1≤m≤10,T≤50。

    对于100%的数据,1≤n≤100000,1≤m≤300,T≤100000,输入保证操作合法。

    用两个队列进行模拟

    q记录小组顺序

    que[]记录小组内元素

    #include<cstdio>
    #include<queue>
    using namespace std;
    queue<int>que[305],q;
    int a[100010];
    int main()
    {
        int n,m;
        char s[30];    
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%s",s);
            if(s[1]=='u')
            {
                scanf("%d",&m);
                if(que[a[m]].empty()) q.push(a[m]);
                que[a[m]].push(m);
            }
            else if(s[1]=='o')
            {
                printf("%d
    ",que[q.front()].front());
                que[q.front()].pop();
                if(que[q.front()].empty()) q.pop();
            }
        }
        return 0;
    } 
  • 相关阅读:
    cf B. Sereja and Suffixes
    cf E. Dima and Magic Guitar
    cf D. Dima and Trap Graph
    cf C. Dima and Salad
    最短路径问题(floyd)
    Drainage Ditches(网络流(EK算法))
    图结构练习—BFSDFS—判断可达性(BFS)
    Sorting It All Out(拓扑排序)
    Power Network(最大流(EK算法))
    Labeling Balls(拓扑)
  • 原文地址:https://www.cnblogs.com/sssy/p/7126871.html
Copyright © 2011-2022 走看看