摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
Inversions problem ★☆☆☆☆ 答案正确 100 2015-02-25 14:34:45

题意

给出全排列,翻转任意[l,r]字符k次,问最终存在多少a_i>a_{i-1}的数学期望。

题解

  • G1点数据量不大,暴力枚举即可。

代码

513G.cpp代码已折叠
展开折叠内容
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<set>
using namespace std;
#define llu unsigned long long
#define lld long long
#define ci const lld&
#define sqr(x) ((x)*(x))
#define dsi(n) lld n;scanf("%lld",&n)
#define si(n) scanf("%lld",&n)
#define f(i,n) for(lld i=1;i<=n;++i)
#define fi(n) f(i,n)
#define f0(i,n) for(lld i=0;i!=n;++i)
#define fd(i,n) for(lld i=n;i>=1;--i)
#define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
#define x first
#define y second
lld n,k,ans=0,ans2;
void dfs(ci t,vector<lld> x)
{
    if(t==k)
    {
        foreach(i,x)
        {
            for(typeof(x.begin()) j=i;j!=x.end();++j)
            {
                ans+=(*i>*j);
            }
        }
        ans2++;
        return;
    }
    for(int i=0;i!=n;++i)for(int j=i;j!=n;++j)
    {
        typeof(x) x2=x;
        //foreach(i,x)cout<<*i<<". ";
        //cout<<i<<" "<<j<<endl;
        reverse(x2.begin()+i,x2.begin()+j+1);
        //foreach(i,x2)cout<<*i<<"] ";
        //system("pause");
        dfs(t+1,x2);
    }
}
int main()
{
    si(n);
    si(k);
    vector<lld> p;
    fi(n)
    {
        dsi(a);
        p.push_back(a);
    }
    dfs(0,p);
    cout<<setprecision(16)<<double(ans)/ans2;
}

著作权声明[编辑]

关于[编辑]