2015年2月8日 星期日

Rockethon 2015, problem: (G1) Inversions problem

QQG只寫喏爆搜

#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;
}

沒有留言:

張貼留言