题意:有多组数据,每组数据给出n,m,n表示需要打印的文件个数,m表示要打印的目标位置(m为0~n-1)。
    接下来给出n个数,第i个值对应第i-1个位置的优先级大小。
    打印规则如下:
    将队列中的第一个打印工作J从队列中取出;
    如果在队列中有优先级高于J的打印工作,则不打印J,将J移到队列最后端;
    否则打印J。
    每打印一个需要1分钟,问到目标文件被打印完成需要多少分钟。

#include <iostream>
#include <stdio.h>
#include <stack>
#include <string.h> using namespace std;
const int maxn=;
int q[maxn]; //模拟的队列
int t,n,m;
int first,rear; //头指针和尾指针
int main()
{
scanf("%d",&t);
while(t--){
//maxv为队列中的最大优先级,ans为最后输出目标文件所需要的时间
int maxv=,ans=;
first=rear=;
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
scanf("%d",&q[i]);
maxv=(q[i]>maxv)?q[i]:maxv;
}
rear=n-;
while(){
//如果队首的优先级不是最大的,那么将它移到队列末尾
if(q[first]<maxv){
rear=(rear+)%n;
q[rear]=q[first];
//如果是要打印的目标文件,那么更新目标文件的位置m
if(first==m)
m=rear;
first++;
first%=n;
}
else{
//队首的优先级最大,则打印队首文件,如果为目标文件,则直接退出循环。
ans++;
if(first==m)
break;
first++;
first%=n;
}
int point=first;
maxv=;
//找出剩下队列中的最大优先级
while(point!=rear){
maxv=(q[point]>maxv)?q[point]:maxv;
point=(point+)%n;
}
maxv=(q[point]>maxv)?q[point]:maxv;
}
printf("%d\n",ans);
}
return ;
}

POJ 3125 Printer Queue(队列,水题)的更多相关文章

  1. POJ 3125 Printer Queue

    题目: Description The only printer in the computer science students' union is experiencing an extremel ...

  2. (队列的应用5.3.3)POJ 3125 Printer Queue(优先队列的使用)

    /* * POJ_3125.cpp * * Created on: 2013年10月31日 * Author: Administrator */ #include <iostream> # ...

  3. poj 3080 Blue Jeans(水题 暴搜)

    题目:http://poj.org/problem?id=3080 水题,暴搜 #include <iostream> #include<cstdio> #include< ...

  4. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  5. POJ 3176 Cow Bowling (水题DP)

    题意:给定一个金字塔,第 i 行有 i 个数,从最上面走下来,只能相邻的层数,问你最大的和. 析:真是水题,学过DP的都会,就不说了. 代码如下: #include <cstdio> #i ...

  6. poj 1007:DNA Sorting(水题,字符串逆序数排序)

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 80832   Accepted: 32533 Des ...

  7. poj 1004:Financial Management(水题,求平均数)

    Financial Management Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 126087   Accepted: ...

  8. poj 1658 Eva's Problem(水题)

    一.Description Eva的家庭作业里有很多数列填空练习.填空练习的要求是:已知数列的前四项,填出第五项.因为已经知道这些数列只可能是等差或等比数列,她决定写一个程序来完成这些练习. Inpu ...

  9. POJ 2259 - Team Queue - [队列的邻接表]

    题目链接:http://poj.org/problem?id=2259 Queues and Priority Queues are data structures which are known t ...

随机推荐

  1. 返璞归真vc++之字符类型

    在今天,大量使用java与.net的程序员已经很少去真实了解字符的底层表达,但是使用VC++编程,对字符的处理却非常慎重,刚学习vc++肯定会为其中的字符类型给晕头转向,今天本人学习第一节,从字符开始 ...

  2. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化   在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...

  3. Allegro设置十字大光标

    使用大十字光标,在摆放元器件时,容易对齐.在allegro中,可以通过设置实现大十字光标,其具体方法如下: 1.选择Setup->User Perferences,即可出现如下图所示界面: 2. ...

  4. boost:program_options

    由于系统库getopt和getopt_long用起来不够直观,仔细看了下boost发现Boost.Program_options可以满足我的需求,它和getopt系列函数一样,可以抓起命令行参数,这里 ...

  5. 实现简单的cp命令

    在Linux下实现简单的cp命令.这是<APUE>第四章的其中一道练习题. 其实思路很简单,弄清规则就行了.规则1:源文件必须得存在,否则出错:规则2:目的文件若不存在则创建,若存在,则提 ...

  6. seajs使用记录

    关于base的默认路径: [官方说明]: 模块系统的基础路径即 base 的默认值,与 sea.js 的访问路径相关: 如果 sea.js 的访问路径是: http://example.com/ass ...

  7. Sql 临时表

    一个#是只能在当前打开滴查询窗体查询,两个#是能够在其他打开滴查询窗体查询 SELECT 'VR001839003YP' 列名1,'RO512498726DE' 列名2 INTO #临时表 UNION ...

  8. Jquer Ajax xmlhttp请求成功了,为什么一直在error函数里面

    转载自http://www.cnblogs.com/sky_Great/archive/2013/01/18/2866861.html 并进行整理: 今天遇到了一个极其奇怪的问题,用各种工具检查都能看 ...

  9. mysql绿色版安装问题解决(ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061))

    原来一直是使用MySQL安装版没有出现过问题,今天在安装绿色版MySQL时出现了点问题 在安装成windows服务成功后,用net start mysql 启动时提示启动成功,但当我连接mysql就报 ...

  10. java package and import

    1.Package Package类的主要作用是解决命名冲突.package中所存放的所有文件,一般分一下就分这三种 1,java程序源文件,扩展名为.java. 2,编译好的java类文件,扩展名为 ...