Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52753 | xhx_the_juruo | 敏捷排列 | C++ | 解答错误 | 40 | 0 MS | 268 KB | 651 | 2022-07-20 11:51:52 |
#include<iostream> #include<cstdio> #define ld long double using namespace std; int n; int p[25],vi[25],cnt; ld f[25][25],ans,now,fac,a,b; void dfs(int x){ if(vi[x]) return; vi[x]=1; dfs(p[x]); return; } int main(){ scanf("%d%Lf%Lf",&n,&a,&b); for(int i=1;i<=n;i+=1) scanf("%d",&p[i]); for(int i=1;i<=n;i+=1){ if(vi[i]) continue; dfs(i); cnt+=1; } ans=(n-cnt)*a; f[0][0]=fac=1; for(int i=1;i<=n;i+=1){ fac=fac*i; for(int j=1;j<=i;j+=1){ f[i][j]=f[i-1][j-1]+(i-1)*f[i-1][j]; } } for(int i=1;i<=n;i+=1){ now=fac/f[n][i]*b+(n-i)*a; ans=min(ans,now); } printf("%.20Lf\n",ans); return 0; }