考虑dp,我们知道答案就是逆序对为0的期望步数。
对于一轮操作,有50%的可能逆序对不变,有50%的可能逆序对-2
对于这个状态方程进行化简就能得到答案

#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=9e6+10; const int inf=0x3f3f3f3f; int a[N]; double f[N]; int main(){ ios::sync_with_stdio(false); int n; cin>>n; int i; for(i=1;i<=n;i++) cin>>a[i]; int ans=0; int cnt=0; for(i=1;i<=n;i++){ for(int j=1;j<i;j++){ if(a[i]<a[j]){ cnt++; } } } if(cnt%2){ cnt--; f[cnt]=1; } else{ f[cnt]=0; } for(i=cnt-2;i>=0;i-=2){ f[i]=f[i+2]+4; } printf("%.6f ",f[0]); return 0; }