SDNUOJ 1612.Printer Queue (练习STL queue的用法)

Printer Queue(打印队列)POJ3125 Printer Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2817   Accepted: 1523 Description 阅读详情

Time Limit: 1000 MS Memory Limit: 32768 KB
Description
学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9间的优先级,优先级越高表示任务越急。

打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。 输入打印队列中各个任务的优先级以及所关注的任务在队列中的位置(队首位置为0),输出该任务完成的时刻。所有任务都需要1分钟打印。例如,打印队列为{1,1,9,1,1,1},目前处于队首的任务最终完成时刻为5。

Translated by @HuangBo

Input
输入T 接下来T组数据 每组数据输入N,KEY。接下来N个数,KEY代表目标任务

T <= 100 N <= 100 KEY < N
Output
输出每组任务完成的时刻
Sample Input
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
Sample Output
1
2
5
Source
UVA12100 Translated by @HuangBo

基本思路就是用queue模拟打印队列,用key模拟我们想知道的那个数据的位置,每当有一个元素出队或移动时,key的值都会进行相应的改变以模拟操作完后元素的位置,中间还有一个操作是动态改变最大值,由于每次打印的元素都是目前队列中的最大值,并且打印完后剩下队列的最大值是上一个队列中第二大的值,明白这一点之后,就可以用一个倒序数组装所有数据,每次最大值改变的时候让数组下标加1即可,下面是ac代码:

#include<iostream>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int x,int y)
{
	return x>y;           //定义sort函数的排序规则 
}
int main()
{
	queue<int> q;         //创建一个队列 
	int c[105];           //用来动态改变最大值 
	int a,t,n,key,time=0,max,k=1;
	cin>>t;               //接下来会有t组数据 
	for(int i=1;i<=t;++i)
	{
		cin>>n>>key;
		for(int j=1;j<=n;++j)
		{
			cin>>a;
			q.push(a);
			c[j]=a;         
		}					 //让所有元素入队 ,把所有元素装到c中备用 
		//if(n==1) max=c[1];
		//else
		//{
		sort(c+1,c+n+1,cmp); //对c数组排序 
		max=c[k++];			 //max的初值是所有元素的最大值 
		//}
		//cout<<key;
		//cout<<q.front()<<" "<<c[1];
		while(true)
		{
			//cout<<key;
			//printf("key1 = %d\n", key);
			if(q.front()>=max)     //如果即将打印的元素优先级大于等于优先级最大的元素 
			{
				//printf("key3 = %d\n", key);
				//cout<<key;
				//if(k1!=key) k1--;
				q.pop();             //弹出它 
				max=c[k++];           //改变max的值 
				time++;					//操作次数加一 
				//cout<<max<<" "<<key<<endl;
				if(key==0) break;      //循环退出条件是弹出目标元素 
				else key--;            //弹出了一个元素,就相当于目标元素前移了1 
			}
			else                    //如果即将打印的匀速优先级小于优先级最大的元素 
			{
				//printf("key2 = %d\n", key);
				q.push(q.front());     
				q.pop();              //那就把它弄到队列最后去 
				if(key==0)
				{
					key+=q.size()-1;   //如果这个是目标元素,则加上相应的值模拟它的移动 
				}
				else
				{
					key--;           //如果它不是目标元素,就相当于目标元素前移了1 
				}
			}
			//cout<<max<<" "<<key<<endl;
		}
		cout<<time<<endl;            //输出操作次数 
		while(true)
		{
			if(!q.empty()) q.pop();
			else break;                  //清空队列 
		}
		time=0;                         //重置操作次数(很重要别忘了) 
		k=1;                             //重置c数组的下标 
	}
	return 0;
}
1143.Printer Queue 1143_Printer Queue.cpp 参考代码 立即下载

相关推荐

开源Agent Skill让AI画图不再翻车:从数据到专业图表全流程

在人工智能与数据可视化交叉领域,让模型直接生成图表往往伴随字体乱码、坐标轴密集、配色失调等高频问题。Agent Skill作为一种可复用的能力封装机制,将专业绘图流程固化为标准化操作手册,从数据特征识别、图表类型决策到代码生成与渲染校验形成完整闭环。它不再依赖临时提示词的一次性发挥,而是让AI按领域专家的思维执行任务,显著提升出图质量与稳定性。这种能力在数据分析报告、运营日报、论文插图等场景具有广泛实用价值,尤其适用于需要快速产出规范化图表的工作流。本文即从这一技术范式出发,介绍一个GitHub上获得2.5

weixin_33851429的博客 968

UVA12100 Printer Queue(STL)

题意: The only printer in the computer science students’ union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer queue and you may have to wait for hours to...

要多努力,才走得到远方 442

【问题解析】Matlab Function的易错点(Variable Size)

Matlab Function的易错点

CrazyRabbit的博客 9869

洛谷-UVA12100 打印队列 Printer Queue

题目描述 PDF 输入格式 输出格式 题意翻译 学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9间的优先级,优先级越高表示任务越急。 打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列...

大学生小汪的成长博客 956

编程语言的未来走向:趋势、挑战与机遇

同时,鼓励他们接触和掌握一些专业领域的开发工具和技术框架,比如Web开发中的JavaScript、React.js,数据分析的Python(Pandas, NumPy, Matplotlib等),以及人工智能和机器学习领域的TensorFlow、PyTorch等。当前,全球范围内正积极推动编程教育的普及化,从儿童启蒙阶段到高等教育阶段,乃至终身学习的过程中,如何优化编程语言的教学方法、提高教学质量,并将其广泛应用于不同领域,是教育者与政策制定者面临的重大课题。未来,编程语言的多样化和包容性将会继续加强。

zrc_xiaoguo的博客 1829

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1452

C++编程语言STL之queue介绍

适配器(adaptor)是STL中的一个通用概念。容器、迭代器和函数都有适配器。本质上,适配器是一种机制,它能使某种事物的行为看起来像另外一种事物。容器适配器接受一种已有的容器类型,使其行为看起来像另外一种不同的(容器)类型。queue就是STL定义的一种顺序容器适配器,其中的数据是以FIFO(First In First Out)的方式组织的。

liitdar的博客 3312

【ACP】2025-最新-疑难题解析- 练习一汇总

他们对您的方案比较满意,作为一个特别看重用户体验的创业公司,他们有一个比较担心的问题:在后端云服务器 ECS 实例相对空闲时,可能会触发减少 ECS 实例的伸缩活动,这时候运行在即将移出伸缩组的 ECS 实例上的应用会被终止,那么发起这些应用的用户的体验会变差。:在使用阿里云的负载均衡 SLB 实例时,做了如下健康检查的配置:响应超时时间为 5 秒,健康检查间隔为 2 秒,不健康阈值为 3,健康阈值为 3,即对于确认一个后端服务器 ECS 实例是健康的,需要连续三次得到正常响应。以下说法哪一项是正确的?

jundao1997的专栏 326

UVa 12100 - Printer Queue

题意 排队打印。每个打印任务有自己的优先级1~9,数字越大优先级越高。每个打印任务需要1分钟,如果队首后面有优先级更高的打印任务,则队首站到队尾,直到队首为队列中最高优先级的任务,则打印。 思路 水题 操作用STL队列queue 用mrk[10]分别记录1~9优先级任务各自有多少 每次查找队中最大优先级的级别,并循环判断 AC代码 #include &lt;iostre...

JinxiSui的博客 266

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

2301_77192876的博客 2214

2 硬件工程师笔面试高频知识考点真题解析——电容

本文全面解析了电容在电子电路中的关键应用与技术要点。主要内容包括:1. 电容选型核心要素:介质材质(陶瓷/电解/钽电容等)、容值精度、耐压等级、温度特性、ESR参数等,不同应用场景(滤波/去耦/谐振等)的选型策略。2. 典型电路应用原理:详细阐述去耦电容布局规则、晶振负载电容作用、共射放大电路旁路电容功能,以及RC电路的滤波/定时等应用。3. 特殊问题解决方案:MLCC啸叫机理与对策、寄生电容影响与消除、高速信号线电容使用禁忌等工程实践难题。4. 安全规范要点:X/Y电容的区别与选用、电解/钽电容防反接措施

XU157303764的博客 1564

【UVA No. 12100】 打印队列 Printer Queue

【UVA No. 12100】 打印队列 Printer Queue

代码改变世界 1243

Android Telephony主要模块及功能

Telephony的代码主要由五个模块组成 1.Telephony Frameworks 代码区域: frameworks/opt/telephony/ 其中主要的文件在如下目录 /frameworks/opt/telephony/src/java/com/android/internal/telephony/ 其中比较常见的有以下几类文件 1.BaseCommands、RIL构成R

泊客 7723

打印队列问题

一问题描述 在计算机学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个 1~9的优先级,优先级越高表示任务越急。 打印机的运转方式:首先从打印队列里取出一个任务J,如果队列中有比任务J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。输入打印队列中各个任务的优先级以及你的任务在队列中的位置(队首位置为0),输出该任务完成的时刻。所有任务都需要1分钟打印。例如,打印队列为{1,1,9,..

实践求真知 2742

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

UVA12100 打印队列 解题报告

维护两个队列,一个普通的queue队列q,用于维护当前的打印机打印队列先后顺序,一个优先队列pq,用于维护当前的打印优先级。每次从q中出队一个文件,然后将其和pq的队首进行比对(也就是当前优先级最高的那个),优先级相同则代表现在要打印的就是这个(题目保证了每个文件的优先级唯一)。详细细节可见代码和注释。所有任务都需要1分钟打印。打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。

qq_45554473的博客 395

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Uva12100Printer Queue NWERC2008 解题报告

题意学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9件的优先级,优先级越高表示任务越急。 打印机的运作方式如下:首先从打印队列里取出一个J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。 即每次都只打印队列中最大优先级的任务 输入打印队列中各个任务的优先级

Link_Ray的博客 697

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

打印队列(Printer Queue)(优先队列)

学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9间的优先级,优先级越高表示任务越急。 打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。 输入打印队列中各个任务的优先级以及所关注的任务在队列中的位置(队首位置为0),输出该任务完成的时刻。所有任务都需要1分钟打印。例如,打印队列为{1,1,9,1,1,1},目前处于

韶言大雅 7607

Uva12100 Printer Queue

题目 The only printer in the computer science students’ union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer queue and you may have to wait for hours to g...

404 Not Found 465

UVA12100 打印队列 Printer Queue

题意描述 学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9间的优先级,优先级越高表示任务越急。 打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。 输入打印队列中各个任务的优先级以及所关注的任务在队列中的位置(队首位置为0),输出该任务完成的时刻。所有任务都需要1分钟打印。例如,打印队列为{1,1,9,1,1,1}

LXYDSF的博客 800

1443.Printer Queue 基本队列操作

/* 1443.Printer Queue 基本队列操作 题目大意: 给出一个长度为n的打印任务队列,每个任务有优先级。每次从队列头得到一个任务,如果它是剩余任务中优先级最高的,则打印它,否则放到队列尾。求出其中某个特定任务是第几个被执行的。 n<=100 解题思路: 使用队列直接模拟。 取出队列头判断是否打印,如果打印则已打印任务数

lhsheng1989的专栏 2609

UVA - 12100 Printer Queue

因为刚开始题目理解错了,误认为刚开始取出的任务是需要打印的任务,结果用不同的方法重写了N边都是WA,悲剧啊 后来好好看题看,其实很简单。。。重写后一边AC #include <bits/stdc++.h> using namespace std; int main() { int T; cin >> T; while(T--) ...

weixin_30419799的博客 92

习题5_7 打印队列(Printer Queue, ACM/ICPC NWERC 2006, UVa12100)

题目描述:        学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9间的优先级,优先级越高表示任务越急。        打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。

As_zyh的博客 665

uva12100解题报告

水题留念 一个队列模拟进出操作,一个优先队列保存优先级,模拟过程输出结果 #include #include #include #include using namespace std; const int maxn=100+10; typedef pair P; struct cmp { bool operator () (const P &p1,const P &p2)cons

董成荣的博客 821

5.5 习题

先鸽一会儿啦

weixin_55835175的博客 648

queue应用:UVA12100 打印队列

题目描述: 学生会里只有一台打印机,但是有很多文件需要打印,因此打印任务不可避免地需要等待。有些打印任务比较急,有些不那么急,所以每个任务都有一个1~9间的优先级,优先级越高表示任务越急。 打印机的运作方式如下:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把J放到打印队列尾部,否则打印任务J(此时不会把它放回打印队列)。 输入打印队列中各个任务的优先级以及所关注的任务在队列中的位置(队首位置为0),输出该任务完成的时刻。所有任务都需要1分钟打印。例如,...

qq_48988844的博客 411
上一篇: SDNUOJ 1614.阿哲的幻想国(练习vector的用法)
下一篇: 快速幂模板及对其的理解
Konjacer
博客等级 码龄9年 18粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值