ACM程序设计选修课——1044: (ds:队列)打印队列(queue模拟)
问题 A: (ds:队列)打印队列
时间限制: 1 Sec 内存限制: 128 MB
提交: 25 解决: 4
[提交][状态][讨论版]
题目描述
网络工程实验室只有一台打印机,它承担了非常繁重的工作。有时在打印机队列中有上百份的文件要打印,你可能要等上几个小时才能得到一页打印输出。
因为有些打印工作比较重要,所以Hacker General发明和实现了打印工作队列的一个简单的优先系统。每个打印工作被赋予了一个从1到9的优先级(9是最高优先级,l是最低优先级)。
打印机操作如下:
将队列中的第一个打印工作J从队列中取出;
如果在队列中有优先级高于J的打印工作,则不打印J,而是将J移到队列最后端;
否则,打印J(不将J移到队列最后端)。
用了这一方法,所有重要的文件能很快被打印。当然,令人烦恼的是其他的要被打印的文件要等上更多的时间。
现在的任务是确定你的打印工作什么时候被完成,请你写一个程序来计算它。给出当前队列(和优先级列表)以及你的工作在队列中的位置,计算需要多长时间你的工作才能被打印,假定队列中不会加入附加的工作。为了使事情简单化,我们设定一件打印工作恰好花费一分钟,向队列中添加一项打印工作和移走一件打印工作是在瞬间完成的。
输入
第一行给出一个正整数,表示测试用例的个数(最多100)。然后,对每个测试用例,第一行给出两个整数n和m,其中n是队列中的对象个数(l<=n<=100),m是你打印工作的位置(0<=m<=n-1)。队列中第一个位置编号为0,第二个位置编号为1,依次类推。
第二行给出n个整数,范围从l到9,给出队列中所有工作的优先级。第一个整数给出第一个打印工作的优先级,第二个整数给出第二个打印工作的优先级,依次类推。
输出
对每个测试用例输出一行,它是一个整数,表示到你的打印工作完成需要多少分钟。假定打印工作进行的时候没有附加的打印加入。
样例输入
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
样例输出
1
2
5
第一次用deque模拟不知道为什么错了。经过聚聚指导,用两个queue过了。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<sstream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<deque>
using namespace std;
typedef pair<int,bool> pii;
bool cmp(const int &a,const int &b)
{
return a>b;
}
int main (void)
{
int t,i,j,ans,n,k,yy,temp;
bool ok,haole;
cin>>t;
while (t--)
{
cin>>n>>k;
int num[150]={0};
int cnt=0;
queue<pii>list;//模拟队列
queue<int>pri;//优先级排序队列
for (int i=0; i<n; i++)
{
cin>>yy;
if(i!=k)
list.push(pii(yy,false));
else
list.push(pii(yy,true));
num[cnt++]=yy;
}
sort(num,num+cnt,cmp);//先放在临时数组里排序一下
for (int i=0; i<n; i++)
{
pri.push(num[i]);//放入优先队列
}
ans=0;
haole=0,ok=0;
while (!haole)
{
while ((list.front()).first!=pri.front())//若开头的不是优先级最高
{
list.push(list.front());
list.pop();
}
if((list.front()).second==true)//若开头的是被标记的任务,直接打印+break
{
ans++;
break;
}
list.pop();
pri.pop();
ans++;
}
cout<<ans<<endl;
}
return 0;
}
ACM程序设计选修课——1044: (ds:队列)打印队列(queue模拟)的更多相关文章
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)
问题 E: (ds:图)公路村村通 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...
- ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)
问题 F: (ds:图)旅游规划 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...
- ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)
Problem D: (ds:树)合并果子 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 80 Solved: 4 [Submit][Status][ ...
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- ACM程序设计选修课——1018: Common Subsequence(DP)
问题 L: Common Subsequence 时间限制: 1 Sec 内存限制: 32 MB 提交: 70 解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...
- ACM程序设计选修课——1076汇编语言(重定向+模拟)
1076: 汇编语言 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 34 Solved: 4 [Submit][Status][Web Board] ...
- ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)
1057: Beautiful Garden Time Limit: 5 Sec Memory Limit: 128 MB Submit: 25 Solved: 12 [Submit][Statu ...
- ACM程序设计选修课——1065: Operations on Grids(暴力字符串)
1065: Operations on Grids Time Limit: 3 Sec Memory Limit: 128 MB Submit: 17 Solved: 4 [Submit][Sta ...
- ACM程序设计选修课——1041: XX's easy problem(神烦的多次字符串重定向处理)
1041: XX's easy problem Time Limit: 1 Sec Memory Limit: 128 MB Submit: 41 Solved: 7 [Submit][Statu ...
随机推荐
- UVA 11987 Almost Union-Find (单点修改的并查集)
此题最难处理的操作就是将一个单点改变集合,而普通的并查集是不支持这种操作的. 当结点p是叶子结点的时候,直接pa[p] = root(q)是可以的, p没有子结点,这个操作对其它结点不会造成任何影响, ...
- python之函数默认参数的坑
坑 当你的默认参数如果是可变的数据类型,你要小心了 例题 # 正常没毛病的操作 def func(a,b=False): print(a) print(b) func(1,True) # 在实参角度, ...
- c++ json字符串转换成map管理
在cocos2dx for lua中,我们经常通过lua的table传入c++使用,然后早c++层操作数据. 实现步骤大致如下: table->string->c++层->通过rap ...
- new和delete的动态分配。
c++对象模型 视频的实际操作 note: 1.虚函数有虚指针,所以是4,不管有几个虚函数, 都只有一个vptr来存放调用的虚函数的地址. 2.子类的内存是父类内存的加自己的数据内存. 3.clas ...
- 【数论分块】bzoj2956: 模积和
数论分块并不精通……第一次调了一个多小时才搞到60pts:因为不会处理i==j的情况,只能枚举了…… Description $\sum_{i=1}^{n}\sum_{j=1 \land i \not ...
- Codeforces Round #513 (rated, Div. 1 + Div. 2)
前记 眼看他起高楼:眼看他宴宾客:眼看他楼坍了. 比赛历程 开考前一分钟还在慌里慌张地订正上午考试题目. “诶这个数位dp哪里见了鬼了???”瞥了眼时间,无奈而迅速地关去所有其他窗口,临时打了一个缺省 ...
- (68)zabbix windows性能计数器使用详解
概述 windows下的性能计数器让zabbix监控更加轻松,直接获取性能计数器的数值即可完成windows监控.性能计数器如下: 1 perf_counter["\Processor( ...
- NodeJS基础-Buffer
Buffer用于处理二进制数据流 实例类似于整数数组,大小固定 C++代码在V8堆外分配物理内存 // 创建一个长度为10,且用0填充的Buffer const buf1 = Buffer.alloc ...
- SEO 优化
1.什么是SEO优化: 简单的来说就是了解搜索引擎的排名规则,投机所好,让我们的网站在搜索引擎上得到靠前的排名,获取更多流量的一种方式. 2.SEO优化-衡量标准 关键词的排名--核心关键词的效果 收 ...
- LeetCode(138) Copy List with Random Pointer
题目 A linked list is given such that each node contains an additional random pointer which could poin ...