一开始理解错了题目,队列中存在比队首优先级高的数,不需要打印,只需要放到最队尾即可。
只有在队首为最高优先级时,才需要打印。
代码:
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
int main()
{
int t,n,m,x;
cin>>t;
while(t--)
{
priority_queue<int,vector<int>,less<int> >p; //优先队列用来判断队列中是否有比队首大的数
queue<int> q;
int ans=0;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>x;
q.push(x);
p.push(x);
}
while(1)
{
int f=q.front();
if(p.top()>f) //队列中有比队首优先级高的 需要将队首的数放到队尾
{
if(!m) m=q.size()-1; //目标在队首,更新目标位置
else m--; //不在队首 目标往前一步
q.pop();
q.push(f); //队首放到队尾
}
else if(!m) break; //队首优先级最大 且为目标 直接结束
else q.pop(),p.pop(),ans++,m--; //队首优先级最大 ,打印出来,队列中pop掉该数,ans++,目标数m往前一步
}
cout<<ans+1<<endl; //加上目标值的打印
}
return 0;
}