hdu3625-Rooms
题目
有\(n\)个房间,\(n\)个钥匙,每个钥匙随机出现在一个房间里,一个房间里有且仅有一个钥匙。我们现在手上没有钥匙,但我们要搜索所有的房间,所以我们有\(k\)次机会把一个房间炸开。一号房间里住着一个重要的人,所以一号房间不能炸。给出\(n\),\(k\),求我们能够成功搜索所有房间的概率。
分析
英文题看了一会儿……
我们发现,对于一个由房间和钥匙组成的环,我们只需要随便炸开其中一个房间即可搜索这个环上所有的房间。所以成功的情况就是环的个数小于等于\(k\)并且一号钥匙不在一号房里。
我自己推出的公式比较复杂,基本思路就是,首先求出不管1号房间的可能情况,再减去\(\frac{1}{n}\),即减去一号钥匙在一号房间里的情况,再加上一号钥匙在一号房间且不可行的情况,一起除以\(n!\)即可:
ans=\frac{\sum _{i=1}^k s(n,i)}{n!}-\frac{1}{n}+\frac{\sum _{i=k+1}^n s(n-1,i-1)}{n!}
\end{aligned}
\]
然而hjh告诉我有更简洁的方法:
ans=\frac{\sum _{i=1}^k s(n,i)-s(n-1,i-1)}{n!}
\end{aligned}
\]
成功的情况数就是\(n\)个房间中的环小于等于\(k\)个的情况数减去后\(n-1\)个房间刚好组成\(k-1\)个环(即1号房间自己组成一个环)的情况数。
其实这两个式子在数学上应该是等价的,但这种在枚举的时候计算的思想很棒。
代码
hdu上g++ WA了,c++可以AC。
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<cstring>
using namespace std;
int read() {
	int x=0,f=1;
	char c=getchar();
	for (;!isdigit(c);c=getchar()) if (c=='-') f=-1;
	for (;isdigit(c);c=getchar()) x=x*10+c-'0';
	return x*f;
}
const int maxn=1<<5;
long long s[maxn][maxn];
long double jc[maxn],ans;
int main() {
	#ifndef ONLINE_JUDGE
		freopen("test.in","r",stdin);
	#endif
	s[0][0]=jc[0]=1;
	for (int i=1;i<maxn;++i) {
		jc[i]=jc[i-1]*i;
		for (int j=1;j<=i;++j) s[i][j]=s[i-1][j-1]+s[i-1][j]*(i-1);
	}
	int T=read();
	while (T--) {
		int n=read(),k=read();
		long double tmp=0;
		for (int i=1;i<=k;++i) tmp+=s[n][i]-s[n-1][i-1];
		ans=(tmp/jc[n]);
		/*
		ans-=1.0/n;
		tmp=0;
		for (int i=k;i<n;++i) tmp+=s[n-1][i];
		ans+=(tmp/jc[n]);
		*/
		printf("%.4Lf\n",ans);
	}
}
												
											hdu3625-Rooms的更多相关文章
- 【组合数学:第一类斯特林数】【HDU3625】Examining the Rooms
		
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
 - HDU3625 Examining the Rooms
		
@(HDU)[Stirling數] Problem Description A murder happened in the hotel. As the best detective in the t ...
 - [LeetCode] Meeting Rooms II 会议室之二
		
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
 - [LeetCode] Meeting Rooms 会议室
		
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
 - codeforces 519E A and B and Lecture Rooms LCA倍增
		
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...
 - The 2015 China Collegiate Programming Contest K Game Rooms hdu 5550
		
Game Rooms Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
 - [SmartFoxServer概述]Zones和Rooms结构
		
Zones和Rooms结构: 相对于SFS 1.X而言,在Zones和Rooms的配置上,SFS2X有了显著的改善.尤其是我们建立了房组这样一个简单的概念,它允许在一个逻辑组中管理Rooms,从而独立 ...
 - LeetCode Meeting Rooms II
		
原题链接在这里:https://leetcode.com/problems/meeting-rooms-ii/ Given an array of meeting time intervals con ...
 - LeetCode Meeting Rooms
		
原题链接在这里:https://leetcode.com/problems/meeting-rooms/ Given an array of meeting time intervals consis ...
 - socket.io问题,io.sockets.manager.rooms和io.sockets.clients('particular room')这两个函数怎么用?
		
为什么我用nodejs用这个两个函数获取都会出错呢?是不是socket的api改了?请问现在获取房间数和当前房间的客户怎么获取?什么函数?谢谢!!急求! 网友采纳 版本问题.io.socket ...
 
随机推荐
- BZOJ1821_Group部落划分_KEY
			
题目传送门 这是一道并查集的题目,相信很多人都看出来了. 用一个类似Kurskal的东西求出最近的最大值. 对于一些可以划分在同一个部落里的边,我们一定是优先选择短边合并. code: /****** ...
 - 【NIS】深入了解NIS
			
1 简介 NIS( NetworkInformation Service)提供了一个网络黄页的功能,当用户登录系统时,Linux系统会到NIS主机上去寻找用户使用的帐号密码信息加以比对,以提供用户登 ...
 - Java:break和continue关键字的作用
			
二者的作用和区别 1. break:直接跳出当前循环体(while.for.do while)或程序块(switch).其中switch case执行时,一定会先进行匹配,匹配成功返回当前case的值 ...
 - 一步一步学习JNI
			
本文来自网易云社区 作者:孙有军 前言 本篇的主要目的就是JNI开发入门,使大家对JNI开发流程有一个大致的了解,后续再进行深入学习. JNI不是Android特有的,JNI是Java Native ...
 - 在Win10中通过命令行打开UWP应用
			
近期由于需要在WinX菜单中添加几个UWP应用,但发现很难找到相应的命令行,Universal Apps 的快捷方式属性里也没有. 于是到网上搜了很久才找到一个E文的页面,试了一下确实可行,分享给大家 ...
 - 「日常训练」Woodcutters(Codeforces Round 303 Div.2 C)
			
这题惨遭被卡..卡了一个小时,太真实了. 题意与分析 (Codeforces 545C) 题意:给定\(n\)棵树,在\(x\)位置,高为\(h\),然后可以左倒右倒,然后倒下去会占据\([x-h,x ...
 - 负数取余/整除,Python和C语言的不同
			
总结一句:Python中负数整除,是向负无穷取整,所以导致负数取余不对 在数学公式中,两种语言的表示算法都是一样的,都是: r=a-n*[a/n] 以上,r是余数,a是被除数,n是除数. 唯一不同点, ...
 - artDialog使用说明(弹窗API)
			
Js代码 2. 传入HTMLElement 备注:1.元素不是复制而是完整移动到对话框中,所以原有的事件与属性都将会保留 2.如果隐藏元素被传入到对话框,会设置display:block属性显示 ...
 - 前端开发工程师 - 02.JavaScript程序设计 - 第1章.基础篇
			
第1章--基础篇 JS介绍 html 网页的内容:css 网页的样式:javascript 网页的行为 i.e. hello world <!DOCTYPE html> <html& ...
 - html简约风用户登录界面网页制作html5-css-jquary-学习模版
			
2018--12-12 喜迎双十二,咳咳,,,,我不是打广告哈,购物的节日也不要忘记学习. 大家好,我又来了. 今天抽出来空把自己的学习心得给大家分享,这是一个可开发可扩展的用户登录界面,用于开发学习 ...