直接模拟就好了,注意一下结束的条件。
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <queue> 5 #include <cstdio> 6 #include <vector> 7 8 using namespace std; 9 queue<int> q; 10 int main() 11 { 12 int n,i,j,k,t; 13 int a[1010]; 14 int b[1010]; 15 cin >> t; 16 while(t--) 17 { 18 cin >> n >> k; 19 for(i=0; i<n; i++) 20 cin >> a[i]; 21 for(i=0; i<n; i++) 22 q.push(a[i]); 23 for(i=0; i<n; i++) 24 b[i] = a[i]; 25 sort(b,b+n); 26 int tail = k; //tail是指向目标的指针 27 int cnt = 1; 28 int flag = n-1; 29 while(1) 30 { 31 if(tail < 0) 32 tail = q.size()-1; 33 if(q.front()==b[flag]) 34 { 35 if(tail == 0) 36 break; 37 q.pop(); 38 tail--; 39 cnt++; 40 flag--; 41 } 42 else 43 { 44 int m = q.front(); 45 q.pop(); 46 q.push(m); 47 tail--; 48 } 49 } 50 cout << cnt << "\n"; 51 while(!q.empty()) 52 q.pop(); //一定不要忘记把队列清空!!! 53 } 54 return 0; 55 }