思路:先判断后面有没有优先级大的,再判断m是否为0。注意打印才加时间,交换位置不加时间。
#include <cstdio>]
#include <cstring>
#include <string>
#include <iostream>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <map>
using namespace std;
const int MAXN = 100;
int j[MAXN];
int t, n, m;
bool isok(){
if (m == 0)
return true;
return false;
}
bool check(){
for (int i = 1; i < n; i++){
if (j[i]>j[0]) return false;
}
return true;
}
void next1(){ //not print
int tmp = j[0];
for (int k = 1; k < n; k++)
j[k - 1] = j[k];
j[n - 1] = tmp;
if (m != 0)
m = m - 1;
else
m = n - 1;
}
void next2(){ //print
for (int k = 1; k < n; k++)
j[k - 1] = j[k];
n = n - 1;
m = m - 1;
}
int main(){
while (~scanf("%d", &t)){
while (t--){
int time = 0;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", &j[i]);
while (true){
if (check()){
++time;
if (isok()){
printf("%d\n", time);
break;
}
next2();
//printf("n2time: %d\n", time);
}
else{
next1();
//printf("n1time: %d\n", time);
}
}
}
}
}