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 ...
随机推荐
- axios请求封装和异常统一处理
前端网络请求封装前端采用了axios来处理网络请求,为了避免在每次请求时都去判断各种各样的网络情况,比如连接超时.服务器内部错误.权限不足等等不一而足,我对axios进行了简单的封装,这里主要使用了a ...
- 免考final linux提权与渗透入门——Exploit-Exercise Nebula学习与实践
免考final linux提权与渗透入门--Exploit-Exercise Nebula学习与实践 0x0 前言 Exploit-Exercise是一系列学习linux下渗透的虚拟环境,官网是htt ...
- 优步UBER司机全国各地奖励政策汇总 (3月14日-3月20日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 北京Uber优步司机奖励政策(12月16日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 在线tidb+tipd+tikv扩容,迁移,从UC到阿里云
集群现状: 共有五个节点,配置为16核32g内存,数据节点为1T ssd盘,非数据节点为100g ssd盘: 角色规划: node1 tidb tipd node2 tidb tipd node3 t ...
- Ubuntu 安装 搜狗输入法
1.去下载搜狗输入法安装包: https://pinyin.sogou.com/linux/ 2.安装 sudo dpkg sougou****.deb 3.去设置 参考:https://blog.c ...
- Python对象引用问题总结
对于对象引用问题,一直是一知半解的状态,现整理以备使用. 操作不可变对象进行加减运算时,会在内存中创建新的不可变实例,不会影响原来的引用>>> c=12>>> d= ...
- java Arrays.asList
List<String> list = Arrays.asList("A B C D E F G H I J K L ".split(" ")); ...
- VIN码识别/车牌识别:是入口,是门面
汽车后市场高速发展下,汽车用品.零配件及售后服务已经从实体店延伸至线上,无论是整车厂.4S店.传统的汽修店,还是汽配商,都渴望用更合理的.高效的方式,实现运营管理上的突破. 广州云实信息科技有限公司( ...
- JMeter自学笔记3-创建自己的第一个测试用例
一.写在前面的话: 上篇我们已经认识了JMeter的图形界面,大家应该都是很懵的.那么这篇,我们将学习使用JMeter创建第一个属于自己测试用例. 二.创建自己的第一个测试用例: 1.新建一个Thre ...