注解
1、本题相当于求逆序,一个容量为n的队列,逆序需要交换的次数为 n * (n-1) / 2。
2、本题是个圆形队列(循环队列),相当于没有首尾,因此将队列分成两半,分的时候容量尽量接近,每部分分别逆序再整合即可。
代码
#include <iostream>
using namespace std;
int fun(int n){
return n*(n-1)/2;
}
int main() {
int n;
while(~scanf("%d", &n)){
int a = n/2;
int b = n-a;
printf("%d\n", fun(a)+fun(b));
}
return 0;
}