问题描述
有 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 15 | 1 |
输入示例 | 输出示例 |
6 21 1 9 2 1 2 | 5 |
思路
暴力
code(未验证)
1 #include2 #include 3 using namespace std; 4 #include 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 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 ::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\n",i);41 break;42 }43 q.pop_front();44 i++;45 }46 else // false47 {48 q.push_back(q.front());49 q.pop_front();50 }51 }52 53 54 return 0;55 }