uva12100 Printer Queue (队列模拟, 据说是优先队列,错了)
来源:互联网 发布:淘宝代销分账在哪找呢 编辑:程序博客网 时间:2024/05/21 08:56
题意:给你打印任务的数量, 目标打印任务的序号, 目前的打印队列。
如果队头是目前最重要的任务, 则打印, 否则放回队尾。 问, 目标打印任务是第几个打印的。
思路:用队列模拟打印任务队列, 每个元素是带有{int 重要性、bool 是否是目标打印任务}的结构体。然后按照题意去模拟便是。 关键在于如何判断队头任务 是目前最重要的任务。 只要在输入的时候把重要性另存在一个max[]数组里, 然后把这个数组从大到小排序, 每打印一个,下标后移一位。 下标指向的 便是目前最大的。(最后我会说下为什么优先队列不行)
算法复杂度:空
代码:
#include <cstdio>#include <queue>#include <algorithm>#include <cstring>using namespace std;#define MAX_N 105struct SNode {SNode(int pri = 0, bool tar = false) {priority = pri;target = tar;}int priority;bool target;};int cmp(int, int);int main(){int cases;scanf("%d", &cases);while (cases--) {// initint jobs[MAX_N];queue<SNode> que;int n, target;memset(jobs, 0, sizeof(jobs));while (!que.empty()) {que.pop();}// enterscanf("%d%d", &n, &target);for (int i = 0; i < n; i++) {int priority;scanf("%d", &priority);if (i == target) {que.push(SNode(priority, true));} else {que.push(SNode(priority, false));}jobs[i] = priority;}// sortsort(jobs, jobs + MAX_N, cmp);// dobool ok = false;int count = 0;int *p = jobs;while (!ok) {SNode front = que.front();que.pop();if (front.priority == *p) {count++;p++;if (front.target) {ok = true;}}else {que.push(front);}}//outputprintf("%d\n", count);}return 0;}int cmp(int a, int b){return a > b;}
那为什么优先队列不行呢? 因为优先队列各个元素之间的相对位置是不变的。
#include <cstdio>#include <queue>using namespace std;struct Jobs{Jobs(int pri = 0, bool tar = false) {priority = pri;target = tar;}friend bool operator < (Jobs a, Jobs b) {return a.priority < b.priority;}int priority;bool target;};int main(){int cases;scanf("%d", &cases);while (cases--) {//initint num, target;scanf("%d%d", &num, &target);priority_queue<Jobs> pque;while (!pque.empty()) {pque.pop();}//enterfor (int i = 0; i < num; i++) {int priority;scanf("%d", &priority);if (i == target) {pque.push(Jobs(priority, true));}else {pque.push(Jobs(priority, false));}}//outputfor (int i = 1; i <= num; i++) {if (pque.top().target) {printf("%d\n", i);}pque.pop();}}return 0;}
样例3就过不了啦~ 9输出去之后, 都是1. 而目标任务 一开始就排在第一位, 所以优先队列会把这个1top()出来。 当然, 结果是错的啦~
- uva12100 Printer Queue (队列模拟, 据说是优先队列,错了)
- UVa12100 Printer Queue (打印队列)
- UVA12100:Printer Queue(打印队列)
- UVALive3638 UVA12100 POJ3125 HDU1972 Printer Queue【队列+模拟】
- UVA12100 Printer Queue 【双端队列】
- 习题5-7 打印队列(Printer Queue, UVa12100)
- UVA 12100 Printer Queue(队列,优先队列)
- queue队列-printer queue
- POJ 3125 Printer Queue 模拟队列
- Printer Queue(poj3125模拟队列)
- uva 12100 Printer Queue(打印队列)模拟
- UVa 12100 - Printer Queue【队列和优先队列】
- 算法竞赛入门经典 第二版 习题5-7 打印队列 Printer Queue uva12100
- UVa12100 - Printer Queue
- UVA12100 - Printer Queue
- UVa12100 Printer Queue
- UVA12100 Printer Queue
- Printer Queue打印队列
- Spinner的用法实现
- 打破“中规中矩”,手机QQ何以萌翻众人?
- eclipse启动tomcat, http://localhost:8080无法访问
- 普元EOS开发学习(一)
- mybatis学习之入门篇
- uva12100 Printer Queue (队列模拟, 据说是优先队列,错了)
- ubuntu12.04安装时出现grub rescue:invalid arch independent ELF magic 问题
- 理解C++ 的 private protected public
- 三种编码函数加密的结果
- Grid++Report
- Android扫描指定文件和目录
- u-boot的nand驱动写过程分析
- FTP Client enterLocalPassiveMode
- 字符编码笔记:ASCII,Unicode和UTF-8