Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52750 | UhhhQQQU | 敏捷排列 | C++ | 解答错误 | 0 | 0 MS | 196 KB | 847 | 2022-07-20 11:51:50 |
#include<cstdio> #include<algorithm> using namespace std; const int N=21; int n; double a,b; int p[N]; bool vis[N]; int num; void dfs(int u) { if(vis[u]) return ; ++num; vis[u]=1; dfs(p[u]); } int main() { scanf("%d %lf %lf",&n,&a,&b); for(int i=1;i<=n;i++) scanf("%d",p+i); bool chk=1; for(int i=1;i<=n;i++) if(p[i]!=i) { chk=0; break; } if(chk) printf("0.00000000000000000000\n"); else if(b<=(double)n*a) { double ans=1; for(int i=1;i<=n;i++) ans*=(long double)i; ans*=b; printf("%.8lf\n",ans); } else { double ans=1,sum; for(int i=1;i<=n;i++) if(!vis[i]) { num=0; dfs(i); if(num>1) { sum=1; for(int j=1;j<=num;j++) sum*=(double)j; ans*=sum/2*a; } } printf("%.8lf\n",ans); } return 0; }