前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >P2776 [SDOI2007]小组队列

P2776 [SDOI2007]小组队列

作者头像
attack
发布2018-04-13 11:49:18
7220
发布2018-04-13 11:49:18
举报

题目背景

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

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

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

所以我就来补一下啦..

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

很渣,因为数据很水所以能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,输入保证操作合法。

第一次用到二维队列

用last来表示每一个小组内元素出现的顺序

q队列表示每一个小组出现的顺序

我们想一下,如果一个元素所属的小组在之前出现过

那么我们直接加到last队列里就好

这样可以保证按照小组的顺序输出

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<queue>
 6 using namespace std;
 7 int read(int & n)
 8 {
 9     char c='.';int x=0,flag=0;
10     while(c<'0'||c>'9')
11     {
12         c=getchar();
13         if(c=='-')flag=1;
14     }
15     while(c>='0'&&c<='9')
16     {
17         x=x*10+(c-48);
18         c=getchar();
19     }
20     if(flag==1)n=-x;
21     else n=x;
22 }
23 const int MAXN=10000001;
24 queue<int>q,last[301];
25 int group[MAXN];
26 int main()
27 {
28     int n,m,p,meiyong;
29     read(n);read(meiyong);
30     for(int i=0;i<n;i++)
31         read(group[i]);
32     read(m);
33     for(int i=1;i<=m;i++)
34     {
35         string s;
36         cin>>s;
37         if(s=="push")
38         {
39             read(p);
40             if(last[group[p]].empty())
41             q.push(group[p]);
42                 last[group[p]].push(p);
43         }
44         else
45         {
46             printf("%d\n",last[q.front()].front());
47             last[q.front()].pop();
48             if(last[q.front()].empty())
49             q.pop();
50             
51         }
52     }
53     return 0;
54 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目背景
  • 题目描述
  • 输入输出格式
  • 输入输出样例
  • 说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档