题目:http://soj.me/1443
根据priority决定打印的顺序,若priority不是最高,则排在队列最后面
思路:基本队列操作 模拟法
#include <iostream> #include <cstdlib> #include <queue> using namespace std; int arr[105]; int p[105]; struct jobs { int priority; bool target; }job[100]; int cmp(const void *a,const void *b) { return *((int *)b)-*((int *)a); } int main() { int t; cin>>t; while(t--) { queue<jobs> q; int n,m; cin>>n>>m; for(int i=0;i<n;i++) { cin>>p[i]; job[i].priority=p[i]; if(i==m) job[i].target=true; else job[i].target=false; q.push(job[i]); } qsort(p,n,sizeof(int),cmp); int maxi=0; int ans=0; while(true) { if(q.front().target&&q.front().priority==p[maxi]) break; if(p[maxi]==q.front().priority) { q.pop(); maxi++; ans++; } else { jobs temp; temp=q.front(); q.pop(); q.push(temp); } } cout<<ans+1<<endl; } return 0; }