数据结构 Job

问题描述

n 项工作在等待队列中等待处理,编号为 1-n。 每个工作有个优先级 p
处理机同一时间只能处理一项工作。
处理机决定接下来处理哪一项工作的方式为:从队首取出一项工作 x,若等
待队列中没有工作的优先级比 x 的优先级大,那么处理 x,否则将 x 放回队尾,
继续寻找符合条件的工作。
现在请你求出编号为 m 的工作是第几个被处理的。


★数据输入
输入第一行为两个正整数 n(1<=n<=100),m(1<=m<=n),n 项工作, 待求的是第
m 项工作。
输入第二行 n 个数, 第 i 个数表示标号为 i 的工作的优先级 pi(1<=pi<=9)

★数据输出
输出为一个整数 t,编号为 m 的工作被解决的时间。

输入示例 输出示例
1 1
5
1


输入示例 输出示例
6 2
1 1 9 2 1 2
5

思路

  暴力

code(未验证)

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 #include <deque>
 5 
 6 struct Node
 7 {
 8     Node(int _priority, int _index)
 9         :priority(_priority),index(_index) {}
10     int priority;
11     int index;
12 };
13 
14 int main()
15 {
16     int i;
17     int num,index,buf;
18     deque<Node> q;
19     scanf("%d %d",&num,&index);
20     for(i=1; i<=num; i++)
21     {
22         scanf("%d",&buf);
23         q.push_back(Node(buf,i));
24     }
25     for( i=1; !q.empty(); )
26     {
27         bool flag = true;
28         for(deque<Node>::iterator it = q.begin(); it!=q.end(); it++)
29         {
30             if((*it).priority > q.front().priority)
31             {
32                 flag = false;
33                 break;
34             }
35         }
36         if(flag)
37         {
38             if(q.front().index==index)
39             {
40                 printf("%d
",i);
41                 break;
42             }
43             q.pop_front();
44             i++;
45         }
46         else // false
47         {
48             q.push_back(q.front());
49             q.pop_front();
50         }
51     }
52 
53 
54     return 0;
55 }



原文地址:https://www.cnblogs.com/cbattle/p/7672982.html