题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 需要注意 |
---|---|---|---|---|---|
Inversions problem | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-25 14:34:45 | 无 |
给出全排列,翻转任意[l,r]字符k次,问最终存在多少的数学期望。
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; } |