HDU3625 Examining the Rooms
@(HDU)[Stirling數]
Problem Description
A murder happened in the hotel. As the best detective in the town, you should examine all the N rooms of the hotel immediately. However, all the doors of the rooms are locked, and the keys are just locked in the rooms, what a trap! You know that there is exactly one key in each room, and all the possible distributions are of equal possibility. For example, if N = 3, there are 6 possible distributions, the possibility of each is 1/6. For convenience, we number the rooms from 1 to N, and the key for Room 1 is numbered Key 1, the key for Room 2 is Key 2, etc.
To examine all the rooms, you have to destroy some doors by force. But you don’t want to destroy too many, so you take the following strategy: At first, you have no keys in hand, so you randomly destroy a locked door, get into the room, examine it and fetch the key in it. Then maybe you can open another room with the new key, examine it and get the second key. Repeat this until you can’t open any new rooms. If there are still rooms un-examined, you have to randomly pick another unopened door to destroy by force, then repeat the procedure above, until all the rooms are examined.
Now you are only allowed to destroy at most K doors by force. What’s more, there lives a Very Important Person in Room 1. You are not allowed to destroy the doors of Room 1, that is, the only way to examine Room 1 is opening it with the corresponding key. You want to know what is the possibility of that you can examine all the rooms finally.
Input
The first line of the input contains an integer T (T ≤ 200), indicating the number of test cases. Then T cases follow. Each case contains a line with two numbers N and K. (1 < N ≤ 20, 1 ≤ K < N)
Output
Output one line for each case, indicating the corresponding possibility. Four digits after decimal point are preserved by rounding.
Sample Input
3
3 1
3 2
4 2
Sample Output
0.3333
0.6667
0.6250
Hint
Sample Explanation
When N = 3, there are 6 possible distributions of keys:
Room 1 Room 2 Room 3 Destroy Times
1 Key 1 Key 2 Key 3 Impossible
2 Key 1 Key 3 Key 2 Impossible
3 Key 2 Key 1 Key 3 Two
4 Key 3 Key 2 Key 1 Two
5 Key 2 Key 3 Key 1 One
6 Key 3 Key 1 Key 2 One
In the first two distributions, because Key 1 is locked in Room 1 itself and you can’t destroy Room 1, it is impossible to open Room 1.
In the third and forth distributions, you have to destroy Room 2 and 3 both. In the last two distributions, you only need to destroy one of Room 2 or Room
Source
2010 Asia Regional Tianjin Site —— Online Contest
Solution
題意:
n个房间对应n把钥匙, 每个房间的钥匙随机放在某个房间内, 概率相同。
有K次炸门的机会,求能进入所有房间的概率
一号门不给你炸
--by ZWL
實際上這題就是第一類Stirling數的模板應用.
不妨設\(key_i\)表示第\(i\)個房間內放的鑰匙是哪把, 則對於這樣一組\(i\)和\(key_i\), 可看作在一個有向圖中, 點\(i\)向點\(key_i\)連出一條有向邊. 當對這個有向圖連邊完畢后, 就會發現, 每個點的出度和入度都為\(1\). 連邊組成一個或多個環. 而在一個環中, 只要有一個房間可以通過任何方式進入, 則其他房間都可以進入了.
由於可以炸開門的次數為\(k\), 因此要求這個圖中環的個數不超過\(k\). 同時由於\(1\)號房間的門不能被炸開, 因此\(1\)不能單獨在一個環中. 所以滿足條件的方案數為: $$qua = \sum_{i = 1}^n \left( \left[ \begin{array}{} n \ i \end{array}{} \right] - \left[ \begin{array}{} n - 1 \ i - 1 \end{array}{} \right] \right)$$
代碼附上:
#include<cstdio>
#include<cctype>
using namespace std;
inline int read()
{
int x = 0, flag = 1;
char c;
while(! isdigit(c = getchar()))
if(c == '-')
flag *= - 1;
while(isdigit(c))
x = x * 10 + c - '0', c = getchar();
return x * flag;
}
const int N = 1 << 5;
long long f[N][N];
long long fac[N];
int main()
{
fac[0] = 1;
for(int i = 1; i < N; i ++)
fac[i] = fac[i - 1] * i;
f[0][0] = 1;
for(int i = 1; i < N; i ++)
f[0][i] = 0;
for(int i = 1; i < N; i ++)
{
f[i][0] = (long long)0;
for(int j = 1; j <= i; j ++)
f[i][j] = f[i - 1][j - 1] + (long long)(i - 1) * f[i - 1][j];
}
int T = read();
for(; T --; )
{
int n = read(), k = read();
long long qua = 0;
for(int i = 1; i <= k; i ++)
qua += f[n][i] - f[n - 1][i - 1];
printf("%.4lf\n", (double)qua / fac[n]);
}
}
HDU3625 Examining the Rooms的更多相关文章
- 【组合数学:第一类斯特林数】【HDU3625】Examining the Rooms
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Examining the Rooms(dp,斯特灵数)
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- [HDU 3625]Examining the Rooms (第一类斯特林数)
[HDU 3625]Examining the Rooms (第一类斯特林数) 题面 有n个房间,每个房间有一个钥匙,钥匙等概率的出现在n个房间内,每个房间中只会出现且仅出现一个钥匙.你能炸开门k次, ...
- hdu Examining the Rooms
这道题的知识点第一次听说 ,就是应用斯特林数.题目的意思是给你房间数N,和最多能破门的个数,让你求能全部把房间打开的概率! a[i][j]=a[i-1][j-1]+(i-1)*a[i-1][j]; # ...
- HDU 3625 Examining the Rooms
题目大意:有n个房间,n!个钥匙,在房间中,最多可以破k扇门,然后得到其中的钥匙,去开其它的门,但是第一扇门不可以破开,求可以打开所有门的概率. 题解:首先,建立这样的一个模型,题目相当于给出一个图, ...
- HDU 3625 Examining the Rooms:第一类stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: 有n个房间,每个房间里放着一把钥匙,对应能开1到n号房间的门. 除了1号门,你可以踹开任 ...
- HDU 3625 Examining the Rooms【第一类斯特灵数】
<题目链接> <转载于 >>> > 题目大意:有n个锁着的房间和对应n扇门的n把钥匙,每个房间内有一把钥匙.你可以破坏一扇门,取出其中的钥匙,然后用取出钥匙打 ...
- Examining the Rooms - 第一类斯特灵数
---恢复内容开始--- 2017-08-10 20:32:37 writer:pprp 题意如下: Recently in Teddy's hometown there is a competiti ...
- hdu 3625 Examining the Rooms——第一类斯特林数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3625 n^2 求斯特林数就行.要减去的就是1号钥匙在1号房间的方案,即 s[ n-1 ][ m-1] . ...
随机推荐
- urllib、requests库整理
- CentOS7.2下Hadoop2.7.2的集群搭建
1.基本环境: 操作系统: Centos 7.2.1511 三台虚机: 192.168.163.224 master 192.168.163.225 node1 192.168.163.226 ...
- POJ:1094-Sorting It All Out(拓扑排序经典题型)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Description An ascending sorted sequence ...
- SPOJ375 Query on a tree(树链剖分)
传送门 题意 给出一棵树,每条边都有权值,有两种操作: 把第p条边的权值改为x 询问x,y路径上的权值最大的边 code #include<cstdio> #include<algo ...
- Linux的档案权限与目录配置练习题
1.请说明/bin与/usr/bin目录所防止的执行文件有何不同之处:/bin主要放置在开机时,以及进入单人维护模式后还能够被使用的指令,至于/usr/bin则是大部分软件提供的指令放置处 2.请说明 ...
- 基于JQuery的WEB套打设计器jatoolsPrinter1.0
开发web套打应用时,如快递单打印,一般要经过以下步骤:1. 扫描快递单据,保存成一个图片文件2. 将底图作成<img>3. 在<img>上放置打印项,试着打印到打印机,观察有 ...
- Selenium WebDriver-actionchain模拟键盘左键长按
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- ant 入门级详解
ant 入门级详解 [转载的地址(也是转载,未找到原文地址)]https://www.cnblogs.com/jsfx/p/6233645.html 1,什么是antant是构建工具2,什么是构建 ...
- verilog 实现中值滤波
图像信号在形成.传输和记录的过程中,由于成像系统.传输介质.工作环境和记录设备等的固有缺陷,不可避免地产生各种类型的噪声,降低了图像的质量,进而影响后续处理(如边缘检测.图像分割.特征提取.模式识别等 ...
- Set容器——TreeSet及常用API
TreeSet及常用Api ① TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快; ② 在存储了大量的需要进行快速检索的排序信息的情况下,TreeSe ...