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 题目约定了每个点的 ...
随机推荐
- 身份证识别接口编写的JAVA调用示例
此java文章是基本聚合数据证件识别接口来演示,基本HTTP POST请求上传图片并接收JSON数据来处理. 使用前你需要通过 https://www.juhe.cn/docs/api/id/153 ...
- vs2010 assistx安装教程
参照此篇教程. 安装目录你可能找不到,因为那些文件是系统隐藏文件,打开隐藏即可. 然后,将此.exe安装到上面的目录下,然后,还需要进行一个破解,即需要将从网上下载的补丁放进去. 把目录下的VA_X. ...
- 集团管控的历史读本——Leo鉴书76
当下中国管理咨询界比較火的课题之中的一个就是"集团管控".公司大了之后怎样正好的用人.怎样对下属分公司不失控制.怎样在二代接手之后系统仍然稳固.种种问题都在困扰着企业们.假设我们把 ...
- kvm&vnc 简单安装shell脚本
#!/bin/bash # created on 2014/7/15 #author : derrick.jiang (Email: derrick.jiang.maichuang.net) echo ...
- MySQL技术内幕InnoDB存储引擎(表&索引算法和锁)
表 4.1.innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示 ...
- strpos与strstr之间的区别
string strstr(string haystack,string needle) 返回haystack中从第一 个needle开头到haystack末尾的字符串. 如果未找到needle 返回 ...
- ES6之路
从工作到现在,虽然是PHP出身,一直都和JS形影不离,从JQ和原生处理页面,到后来被angular1的MVVM模式惊艳到,再到弃angular转战vue,到现在使用react,一路走来,跳坑无数,现在 ...
- struts2 Eclipse 中集成strust2开发框架实例
下面通过建立一个小的实例具体来说明Eclipse 集成struts2,以下实例采用的为 struts2 版本为 struts2 2.2.3.1 为应用. 1. 下载struts2的开发包 第一步: 在 ...
- TCP交换数据流——Nagle算法简单记录
Nagle算法: 该算法提出的目的是想解决网络中大量的小的TCP数据包造成网络拥塞的问题,举个例子,当客户端要发送一个字节的TCP数据包到服务器时,我们实际上产生了41字节长的分组:包括20字节的IP ...
- 九度OJ 1170:找最小数 (最值)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6451 解决:2843 题目描述: 第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x ...