hihocoder1075【开锁魔法】
hihocoder1075【开锁魔法】
题意是给你一个 \(1~n\) 的置换,求选 \(k\) 个可以遍历所有点的概率。
题目可以换个模型:有 \(n\) 个球,有 \(cnt\) 种不同的颜色,求选出 \(k\) 个球包含所有颜色的概率。
根据概率的定义,我们只需求出合法的方案数即可。
设 \(f[i][j]\) 表示选 \(j\) 个球,包含前 \(i\) 种颜色的方案数。转移枚举第 \(i\) 种颜色选的个数即可。
根据乘法原理和加法原理可得:
\]
初始条件是 \(f[0][0]=1\),结果是 \(f[cnt][k]/c[n][k]\)。
#include <bits/stdc++.h>
using namespace std;
#define db double
#define ll long long
#define RG register
inline int gi()
{
RG int ret; RG bool flag; RG char ch;
ret=0, flag=true, ch=getchar();
while (ch < '0' || ch > '9')
ch == '-' ? flag=false : 0, ch=getchar();
while (ch >= '0' && ch <= '9')
ret=(ret<<3)+(ret<<1)+ch-'0', ch=getchar();
return flag ? ret : -ret;
}
const db pi = acos(-1.0);
const int N = 305, inf = 1<<30;
db c[N][N],f[N][N];
int to[N],a[N];
bool vis[N];
int main()
{
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
int T,n,m,i,j,p,cnt;
for (i=1; i<N; ++i)
{
c[i][0]=c[i][i]=1;
for (j=1; j<i; ++j)
c[i][j]=c[i-1][j-1]+c[i-1][j];
}
T=gi();
while (T--)
{
n=gi(), m=gi(), cnt=0;
for (i=1; i<=n; ++i)
{
vis[i]=false, a[i]=0;
for (j=0; j<=m; ++j)
f[i][j]=0;
}
for (i=1; i<=n; ++i)
to[i]=gi();
for (i=1; i<=n; ++i)
{
if (vis[i])
continue;
p=i, cnt++;
while (!vis[p])
a[cnt]++, vis[p]=true, p=to[p];
}
if (m < cnt)
{
puts("0.00000000000");
continue;
}
f[0][0]=1;
for (i=0; i<=cnt; ++i)
for (j=0; j<m; ++j)
{
if (f[i][j] == 0)
continue;
for (p=1; p<=a[i+1] && p+j <= m; ++p)
f[i+1][j+p]+=f[i][j]*c[a[i+1]][p];
}
printf("%.9f\n",f[cnt][m]/c[n][m]);
}
return 0;
}
hihocoder1075【开锁魔法】的更多相关文章
- hrb——开锁魔法I——————【规律】
解题思路:从1到n的倒数之和. #include<stdio.h> #include<string.h> #include<algorithm> using nam ...
- hihocoder 1075 : 开锁魔法III
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...
- #1075 : 开锁魔法III
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...
- Hiho #1075: 开锁魔法III
Problem Statement 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜 ...
- HihoCoder 1075 开锁魔法III(概率DP+组合)
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...
- hihoCode 1075 : 开锁魔法III
时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅 ...
- BZOJ 5004: 开锁魔法II 期望 + 组合
Description 题面:www.lydsy.com/JudgeOnline/upload/task.pdf Input Output 一般概率题有两种套路: 满足条件的方案/总方案. 直接求概率 ...
- bzoj5003: 与链 5004: 开锁魔法II 5005:乒乓游戏
www.lydsy.com/JudgeOnline/upload/task.pdf 第一题题意可以转为选一个长度k的序列,每一项二进制的1的位置被下一项包含,且总和为1,考虑每个二进制位的出现位置,可 ...
- 【bzoj5004】开锁魔法II 组合数学+概率dp
题目描述 有 $n$ 个箱子,每个箱子里有且仅有一把钥匙,每个箱子有且仅有一把钥匙可以将其打开.现在随机打开 $m$ 个箱子,求能够将所有箱子打开的概率. 题解 组合数学+概率dp 题目约定了每个点的 ...
随机推荐
- Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental……
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to th ...
- JSBridge深度剖析
概述 做过混合开发的人都知道Ionic和PhoneGap之类的框架,这些框架在web基础上包装一层Native.然后通过Bridge技术的js调用本地的库. 在讲JSBridge技术之前.我们来看一下 ...
- 1M网速等于多少K
http://zhidao.baidu.com/question/157400316.html&__bd_tkn__=65ac453b343794385019e962bfb06bb8c710d ...
- Mybatis无法扫描到mapper.xml文件
在Mybatis中默认扫描与mapper包同路径下的xml,resource文件的文件夹名称不能一次性创建,如com.baidu.mapper需要创建3次 这里如果是idea开发工具,一次创建与分开创 ...
- android IntentService生命周期问题
假设须要在onHandleIntent之前运行一些操作.比方须要停止当前正在运行的任务.可在onStart做这个操作. 须要注意的是必须在onStart函数的最后(运行完我的操作后)调用super.o ...
- Android MarginLeft与MarginStart的差别
在写layout布局的时候,我们会发现有这样几个比較相似的属性: MarginStart MarginLeft MarginEnd MarginRight 这些属性的差别是什么? 依据ap ...
- nginx for windows 配置多域名反向代理
调试了很久...哦耶 共享出来吧 其实 nginx反向代理同一ip多个域名,给header加上host就可以了 upstream test.test.cn { server 119. ...
- PHP网站常见安全漏洞 及相应防范措施总结
一.常见PHP网站安全漏洞 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍. 1.se ...
- 多媒体开发之---h264 图像参数级语义
(四)图像参数集语义 pic_parameter_set_rbsp( ) { // pic_parameter_set_id 用以指定本参数集的序号,该序号在各片的片头被引用. pi ...
- eclipse集成tomcat改动字符集參数
问题: 在eclipse 4.4(Luna)中集成tomcat时,直接改动原tomcat文件夹中的配置文件,不起作用. 有时.我们会修改字符集參数为utf-8,以解决中文乱码问题,修改之后依旧乱码-- ...