@(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的更多相关文章

  1. 【组合数学:第一类斯特林数】【HDU3625】Examining the Rooms

    Examining the Rooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. Examining the Rooms(dp,斯特灵数)

    Examining the Rooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. [HDU 3625]Examining the Rooms (第一类斯特林数)

    [HDU 3625]Examining the Rooms (第一类斯特林数) 题面 有n个房间,每个房间有一个钥匙,钥匙等概率的出现在n个房间内,每个房间中只会出现且仅出现一个钥匙.你能炸开门k次, ...

  4. hdu Examining the Rooms

    这道题的知识点第一次听说 ,就是应用斯特林数.题目的意思是给你房间数N,和最多能破门的个数,让你求能全部把房间打开的概率! a[i][j]=a[i-1][j-1]+(i-1)*a[i-1][j]; # ...

  5. HDU 3625 Examining the Rooms

    题目大意:有n个房间,n!个钥匙,在房间中,最多可以破k扇门,然后得到其中的钥匙,去开其它的门,但是第一扇门不可以破开,求可以打开所有门的概率. 题解:首先,建立这样的一个模型,题目相当于给出一个图, ...

  6. HDU 3625 Examining the Rooms:第一类stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: 有n个房间,每个房间里放着一把钥匙,对应能开1到n号房间的门. 除了1号门,你可以踹开任 ...

  7. HDU 3625 Examining the Rooms【第一类斯特灵数】

    <题目链接> <转载于 >>> > 题目大意:有n个锁着的房间和对应n扇门的n把钥匙,每个房间内有一把钥匙.你可以破坏一扇门,取出其中的钥匙,然后用取出钥匙打 ...

  8. Examining the Rooms - 第一类斯特灵数

    ---恢复内容开始--- 2017-08-10 20:32:37 writer:pprp 题意如下: Recently in Teddy's hometown there is a competiti ...

  9. hdu 3625 Examining the Rooms——第一类斯特林数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3625 n^2 求斯特林数就行.要减去的就是1号钥匙在1号房间的方案,即 s[ n-1 ][ m-1] . ...

随机推荐

  1. Android内核编译步骤

    android_4.0.4_tq210$ source build/envsetup.shandroid_4.0.4_tq210$ lunch 5/android_4.0.4_tq210$ make ...

  2. selenium2元素定位Xpath和cssSelector

    Selenium2中元素有以下几种定位方法, 常用的有Id,xpath, cssSelector XPATH介绍: XPATH是一种选择器 XPATH在firefox中用firepath验证 XP ...

  3. Apache ant 配置

    ANT_HOME C:\Program Files(D)\apache-ant-1.10.1Path %ANT_HOME%/binant -v

  4. luogu1742 最小圆覆盖

    狗题卡我精度--sol #include <algorithm> #include <iostream> #include <cstdlib> #include & ...

  5. luogu2153 [SDOI2009]晨跑

    要想限制流量,总要想着拆点. #include <iostream> #include <cstring> #include <cstdio> #include & ...

  6. alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!

    大家好! 多语言实现的案例:http://alidoing.com/或者http://www.alidoing.com/ 图:切换语言界面 JS代码实现: 1.首先新建一个对象langobj,当然对象 ...

  7. 30、自定义gridview

    要想实现自定义gridview效果,有下边几个步骤: 1.定义grivew中的item的xml文件 假如item需要显示一个图片,图片下边显示文字: <?xml version="1. ...

  8. webdriver高级应用- 操作富文本框

    富文本框的技术实现和普通的文本框的定位存在较大的区别,富文本框的常见技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构,所以使用普通的定位模式将无法直接定位到富文本框对象. ...

  9. python基础补漏-09-反射

    isinstance class A: passclass B(A): pass b = B()print isinatance(b,A)issubclass 判断某一个类是不是另外一个类的派生类 # ...

  10. IE7中a标签包含img,点击img,链接失效的bug

    在做列表时,我们经常会这样写: <ul class="works-list"> <li> <a href=""> <d ...