问题描述
有 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 }