题目地址
AC代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int t;
cin>>t;
for (int i = 1; i <= t; ++i) {
int n;
cin>>n;
long long int list[n],counter = 0;
for (int j = 0; j < n; ++j) {
cin>>list[j];
}
for (int k = 0; k < n; ++k) {
for (int j = k+1; j < n; ++j) {
if(list[k]>list[j])counter++;
}
}
cout<<"Scenario #"<<i<<":"<<endl<<counter<<endl<<endl;
}
return 0;
}
题解和题目思路
这题的题意就是让你求冒泡排序的交换次数,其实直接用冒泡排序应该也没什么问题但是我懒(大雾)因为不需要你给出最终排序完成的序列,所以我们可以偷懒
在一个数字主动与其他数字交换的时候,其总的交换次数只与在它后面的逆序数的数目有关
根据这个规律,我们只需要一个个算每个数的逆序数,累加即可得出答案