首页 > 其他分享 >P2776 [SDOI2007]小组队列题解

P2776 [SDOI2007]小组队列题解

时间:2022-09-04 10:44:22浏览次数:68  
标签:元素 队列 题解 小组 number int SDOI2007 order P2776

需要解决的问题

  • 1.如何将小组中的元素插进去?

  • 2.如何按顺序输入。

思路

显然,这个题的名字就是小组队列,并根据题意及样例,我们可以比较容易的想到队列这个东西。

首先我们知道,用一个队列肯定是不行的,因为队列不支持从中间插入一个数值;之后我们就看数据范围: \(n \leq 10^6\) ,\(m \leq 300\) 。那么我么转换思路,把每一个小组都当成一个队列,再单独给一个队列存储小组之间的顺序,这样,在我们输出的时候就按顺序输出就行了,如果这个小组里面的元素被弹空了,我们就把这个小组从队列中弹出。

注意事项

  • 1.元素和小组的编号都是从 \(0\) 开始;

  • 2.if 语句的位置

代码

#include<bits/stdc++.h>
using namespace std;

int n,m,t;
string st;
int group[100005];

queue <int> order;/*小组的顺序*/ 
queue <int> q[305];/*小组里元素的顺序*/ 

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<=n-1;i++)
		scanf("%d",&group[i]);/*注意从0开始,输入该元素所属的小组*/ 
	int x;
	scanf("%d\n",&t);
	for(int i=1;i<=t;i++)
	{
		cin >> st;
		if(st=="push")
		{
			scanf("%d",&x);
			int number=group[x];/*number存储输入进去的元素所在的小组*/ 
			if(q[number].empty()) order.push(number);/*注意if语句的位置,先判断是否该小组是否还没有元素,是的话就存入order队列中*/ 
			q[number].push(x);/*如果 if 语句在下面,就会导致if语句一定不成立,order里面没有元素,进而导致代码错误*/ 
		}
		if(st=="pop")
		{
			int dl=order.front();/*查找优先级最高的小组,也就是在队头的小组*/ 
			printf("%d\n",q[dl].front());/*输出*/ 
			q[dl].pop();/*弹出该元素*/ 
			if(q[dl].empty()) order.pop();/*如果这个小组空了,那么下一个该小组的元素进来后顺序就得往后边排了。因此,弹出该小组*/ 
		}
	}
	return 0;
}

标签:元素,队列,题解,小组,number,int,SDOI2007,order,P2776
From: https://www.cnblogs.com/bloodstalk/p/16654483.html

相关文章

  • Jenkins中HTML报告无法正常显示问题解决
    自动化结果生成了HTML报告,但是在Jenkins中打开报告却显示空白,打开控制台,可以看到该报错参考https://www.jenkins.io/doc/book/security/configuring-content-security-po......
  • 洛谷P1558 色板游戏 题解
    高考完后随机跳题的复建运动。看到区间覆盖操作考虑线段树。30种颜色?用位运算存储节省空间。因为在线段树上传合并时只需要考虑这一段是否存在该颜色,(即\(0\)或\(1\))具体......
  • AGC010F 题解
    现在也就会写一写代码长度不超过\(1k\)的题目了。/kk看上去一脸不可做,看到从必败状态逆推的提示后会了。考虑什么算是必败状态,我们设此时棋子所在的位置为\(now\)......
  • 攻防世界 pwn1 题解
    攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符......
  • 9.3 noip 模拟赛 1 题解
    noip模拟赛1题解目录noip模拟赛1题解\(\tolink\leftarrow\)A一步之遥退位计划退役以后重在参与\(\tolink\leftarrow\)A一步之遥构造题手玩了一下没有什么......
  • ARC146 部分题解
    A普及组题//byBalloons#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#definemprmake_pair#definedebug()cerr<<"Madoka"<<e......
  • P5914 [POI2004]MOS 题解
    题目传送门分析这是一道小学经典的数学题,对于这种求最短时间的题目,我们要认真考虑两组人员:首先,跑的快的人应当跑的最多,能者多劳。其次,跑的慢的人应当跑的最少,否则会拉......
  • CF1389B题解
    题目传送门题目分析首先,这道题比较的简单,是一道较为标准的dp,虽说有大佬说可以用贪心做,但本蒟蒻不会。首先,\(0\leqz\leq\min(5,k)\)所以我们可以开一个二维dp,......
  • 【题解】「COCI 2018.10」Teoretičar
    传送门题目大意有一个二分图,构造一种对边的染色方案,使得没有两个颜色相同的边共顶点。假设对于给定二分图的答案是\(C\),记\(X\)是大于等于\(C\)的最小的\(2\)的......
  • 「题解」Longge 的问题
    原题目链接:Link。虽然已经被A穿了但还是写一下。\[\sum_{i=1}^n\gcd(i,n)=\sum_{d\vertn}\sum_{i=1}^n[\gcd(i,n)=d]\]这一步显然,因为\(\forall\gc......