HDN2048(交错复发)
上帝、神与神
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 26725 Accepted Submission(s): 11121
为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动。这个活动的详细要求是这种:
首先,全部參加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;
然后,待全部字条增加完成,每人从箱中取一个字条;
最后。假设取得的字条上写的就是自己的名字。那么“恭喜你。中奖了!”
大家能够想象一下当时的气氛之热烈。毕竟中奖者的奖品是大家梦寐以求的Twins签名照呀!只是。正如全部试图设计的喜剧往往以悲剧结尾,这次抽奖活动最后居然没有一个人中奖!
我的神、上帝以及老天爷呀。怎么会这样呢?
只是。先不要激动。如今问题来了,你能计算一下发生这样的情况的概率吗?
不会算?难道你也想以悲剧结尾?!
1
2
50.00%
N张字条的全部排列可能自然是A(N,N)= N!种排列方式
如今的问题就是N张字条的错排方式有几种。
分两种情况讨论
①:假设前面N-1个人拿的都不是自己的字条。即前N-1个人满足错排,那么仅仅要第N个人把自己的票与前面N-1个人中的随意一个交换,就能够满足N个人的错排。
这时有f(N-1)种方法。
②:假设前N-1个人不满足错排。而第N个人把自己的字条与当中一个人交换后恰好满足错排。
即在前面N-1人中,有N-2个人满足错排,有且仅仅有一个人拿的是自己的字条,而第N个人恰好与他做了交换,这时候就满足了错排。这时有f(n-2)种方法
对于①。由于前N-1个人中,每一个人都有机会与第N个人交换。所以有N-1种交换的可能。
对于②,由于前N-1个人中。每一个人都有机会拿着自己的字条。所以也有N-1种交换的可能。
所以得错排递推公式
1.D[n] = (n-1)*(D[n-1]+D[n-2])
D(1)=0;D(2)=1;
因为计算n!和D[n]数字会很大,所以我们採用边做边除而不是先算D(n),再除n!的方法。
1.已知D[n]=(n-1)(D[n-1]+D[n-2]);
2.f[n]=D[n]/n!;则有D[n]=n!*f[n];
3.代入可得f[n]=(n-1)(f[n-1]*(n-1)!+f[n-2]*(n-2)!)/n!;
4.即得到错排概率公式f[n]=(f[n-1](n-1)+f[n-2])/n;
#include <stdio.h>
int main()
{
double a[22]={0,0,1};
__int64 i,n=3,m,t,j;
char d='%';
while(n<22)
{
a[n]=(n-1)*(a[n-1]+a[n-2]);
n++;
}
while(scanf("%d",&i)!=EOF)
{
while(i--)
{
t=1;
scanf("%d",&m);
for(j=1;j<=m;j++) t*=j;
printf("%.2lf%%\n",a[m]*100/t);
}
}
return 0;
}
明显超时。
ac代码;
#include <stdio.h>
int main()
{
double a[22]={0,0,0.5};
int i,n=3,m,t,j;
while(n<22)
{
a[n]=(a[n-1]*(n-1)+a[n-2])/n;
n++;
}
while(scanf("%d",&i)!=EOF)
{
while(i--)
{
scanf("%d",&m);
printf("%.2lf%%\n",a[m]*100);
}
}
return 0;
版权声明:本文博主原创文章,博客,未经同意不得转载。
HDN2048(交错复发)的更多相关文章
- C#交错数组的用法
class Program { static void Main(string[] args) { /* *交错数组,就是一个一维数组里面的每一项都是一个一维数组 *new交错数组的时候需要注意int ...
- C#交错数组
交错数组本质上是一维数组只不过这个一维数组里的元素都是数组.因为该一维数组里面的元素可以是任何大小的数组所以定义时只能以这样的格式定义 ][]; 定义完后必须对该数组进行初始化后方可进行赋值等操作否则 ...
- JPG渐进 & PNG/PNG24 交错测试
今天由同事说起,PS导出PNG时,有个选项"交错"是干啥的,想起这也是个问题,所以特意搞了个测试页面: 引用网上"交错-就是类似旧式电视的隔行扫描,让图片只花50%的时间 ...
- C#中的数组,多维数组和交错数组
想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...
- lintcode:交错正负数
交错正负数 给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组. 注意事项 不需要保持正整数或者负整数原来的顺序. 样例 给出数组[-1, -2, -3, 4, 5, 6],重新排序之后 ...
- C#二维数组(矩形数组,交错数组)
C# 支持一维数组.多维数组(矩形数组)和数组的数组(交错的数组) 1.多维数组 声明:string[,] names; 初始化:int[,] numbers = new int[3, 2] { {1 ...
- Ejection chain 与交错路
相关文献: Rego, C. (1998). "A Subpath Ejection Method for the Vehicle Routing Problem." Manage ...
- IOS常用CGRect的交错,边缘,中心的检测
转自:http://tsyouaschen.iteye.com/blog/1946957 判断给定的点是否被一个CGRect包含,可以用CGRectContainsPoint函数 BOOL conta ...
- Android 交错 GridView
原文地址 本文演示在你的 Android 应用程序中显示交错 GridView(Staggered GridView ). 下载 Demo 交错 GridView 交错 GridView 只是具有不等 ...
随机推荐
- 前后端分离Web项目中,RBAC实现的研究
在前后端分离Web项目中,RBAC实现的研究 最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...
- python基础课程_2学习笔记3:图形用户界面
图形用户界面 丰富的平台 写作Python GUI程序前,须要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合.能够通过叫做GUI工具包的给定Python模块进行訪问. 工具包 描写叙 ...
- linux下用shell删除三天前或者三天内的文件
说明:+n 大于 n, -n 小于 n, n 相等于 n. find / -amin -30 -ls # 查找在系统中最后30分钟访问的文件find / -atime -2 -ls # 查找在系统中最 ...
- U6Linux的文件权限与目录配置
1.ll查看文件信息:[权限][连接][所有者][用户组][文件容量][修改日期][文件名] 2.第一个字符代表文件的属性:若为[d]则是目录.若为[-]则是文件.若为[l]则为连接. 3.chgrp ...
- Linux通过使用pdb简单调试python计划
python自带的调试工具库:pdb # -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__mai ...
- Windows Phone开发(8):关于导航的小技巧
原文:Windows Phone开发(8):关于导航的小技巧 前文用几个例子对导航做了简单介绍,在一般应用中,使用上一篇文章中说到的方法,其实也够用了,不过,为了能够处理一些特殊的情况,有几个小技巧还 ...
- 关于扩展IP地址空间的几个方案的探讨
摘 要:在IP地址紧缺的背景下,IPv6.NAPT.SuIP几种解决方案应运而生.分析.比较几种方案后,可知SuIP是最佳方案. 关键词:IPv6:NAPT:SuIP:IP地址空间扩展 The In ...
- HDOJ 2665 Kth number
静态区间第K小....划分树裸题 Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- hdoj 2102 A计画 【BFS】
称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...
- CSDN markdown 编辑 三 基本语法
这是一个副本,在准备好了help档,另外补充一些他们自己的解释. 这一次是不说话UML和LaTEX. 准备抽两篇文章专门谈. 1. 标题和字体大小 markdown字号太少了.觉得应该再加些. 在文字 ...