#include<cstdio> #include<algorithm> using namespace std; int n; int arr[10]; int cnt = 0; void dfs(int k){ if(k == 0){ for(int lx = 0;lx < n;lx++) for(int ly = lx+1;ly < n;ly++) cnt += arr[lx] > arr[ly]; return; } for(int lx = 0;lx < n;lx++){ for(int ly = lx;ly < n;ly++){ reverse(arr + lx, arr+ly+1); dfs(k-1); reverse(arr + lx, arr+ly+1); } } return; } int main(){ int k; scanf("%d %d", &n, &k); for(int lx = 0;lx < n;lx++) scanf("%d", arr + lx); dfs(k); int val = 1; for(int lx = 0;lx < k;lx++) val *= (n+1)*n/2; printf("%.9f\n", (double)cnt/(double)(val)); return 0; }
2015年2月8日 星期日
Rockethon 2015, problem: (G1) Inversions problem
QQG只寫喏爆搜
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言