不容易系列之一

Problem Description
大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!
做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。
话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做错了!大家都学过概率论,应该知道出现这种情况的概率,所以至今我都觉得这是一件神奇的事情。如果套用一句经典的评语,我们可以这样总结:一个人做错一道选择题并不难,难的是全部做错,一个不对。

不幸的是,这种小概率事件又发生了,而且就在我们身边:
事情是这样的——HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟!

现在的问题是:请大家帮可怜的8006同学计算一下,一共有多少种可能的错误方式呢?

Input
输入数据包含多个多个测试实例,每个测试实例占用一行,每行包含一个正整数n(1<n<=20),n表示8006的网友的人数。
Output
对于每行输入请输出可能的错误方式的数量,每个实例的输出占用一行。
Sample Input
2 3
Sample Output
1 2
Author
lcy

Mean:

analyse:

就是错排公式的简单运用。下面来了解一下错排公式。

所谓错排就是全错位排序公式,即被著名数学家欧拉(Leonhard Euler,1707-1783)称为组合数论的一个妙题的“装错信封问题”,他求解这样的问题:

一个人写了n封不同的信及相应的n个不同的信封,他把这n封信都装错了信封,问都装错信封的装法有多少种?

递推公式:f(n)=(n-1) * {f(n-1)+f(n-2)}

Time complexity:O(n)

Source code:

// Memory   Time
// 1347K     0MS
// by : Snarl_jsb
// 2014-09-15-21.27
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<string>
#include<climits>
#include<cmath>
#define N 1000010
#define LL long long
using namespace std;
long long a[N];
void cuopai(long long n)     Formula :  f(n)=(n-1)*{f(n-1)+f(n-2)} ;
{
a[1]=0,a[2]=1;
for(long long i=3;i<=n;i++)
{
a[i]=(i-1)*(a[i-1]+a[i-2]);
}
}
int main()
{
//    freopen("C:\\Users\\ASUS\\Desktop\\cin.cpp","r",stdin);
//    freopen("C:\\Users\\ASUS\\Desktop\\cout.cpp","w",stdout);
cuopai(30);
int n;
while(cin>>n)
{
cout<<a[n]<<endl;
}
return 0;
}

  

组合数学 - 全错位排序公式相关推荐

  1. One Day One Step 之全错位排序

     One Day One Step 之全错位排序 今天做了一道题,是关于全错位排序的.在高中的时候,对排列组合一直很头痛,所以今天趁这个机会,好好学习学习! 先来看一下题目吧! 神.上帝以及老天爷 ...

  2. 经典算法题:全错位排列问题

    问题描述 这是一个很经典的数学问题:有一个人写了n封信件,对应n个信封,然而粗心的秘书却把所有信件都装错了信封,那么一共有多少种装错的装法? 数学抽象 这个问题可抽象为以下一个数学问题:已知一个长度为 ...

  3. hdu2048 全错位排序问题

    hdu2048是全错位排序的题目!欧拉给我们证明了可以直接套用公式 f(n)=  nf(n-1)+(-1)^(n-2)  或  nf(n-1)+(-1)^(n)                   n ...

  4. 全错位排列与部分错位排列(组合数学)

    全错位排列 基本简介 "装错信封问题"是由当时最有名的数学家约翰·伯努利(Johann Bernoulli,1667-1748)的儿子丹尼尔·伯努利(DanidBernoulli, ...

  5. NYOJ 912 领帽子(全错位排列)

    领帽子 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有n个人在参加晚会时寄存了自己的帽子.可是保管人忘记放寄存号,当每个人领取帽子时,他只能随机选择一顶帽子交给寄存人 ...

  6. 全错位排列 配对概率问题

    全错位排列    先看下面例子: 例1    5个人站成一排,其中甲不站第一位,乙不站第二位,共有多少种不同的站法. 这个问题在高中很多参考书上都有,有几种解法,其中一解法是用排除法: 先考虑5个有的 ...

  7. 神、上帝以及老天爷(错位排序)

    Description 协会活动为了活跃气氛,组织者举行了一个别开生面.奖品丰厚的抽奖活动,这个活动的具体要求是这样的: 首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中: 然后,待所有 ...

  8. 读论文之《基于 FPGA 的并行全比较排序算法》

    为什么介绍这种排序算法:最近在独立编写霍夫曼编码的verilog HDL设计程序,其中用到了排序模块,对一组数据进行排序,苦寻几天,最终找到了这个全新的适合硬件实现的排序算法,分享与此,以空间换时间的 ...

  9. 基于 FPGA 的并行全比较排序算法,topK

    以空间换时间的并行排序算法. https://blog.csdn.net/Reborn_Lee/article/details/80469391 并行全比较排序算法介绍 排序是一种重要的数据运算,传统 ...

最新文章

  1. PhpMyAdmin的简单安装和一个mysql到Redis迁移的简单例子
  2. 皮纹生物识别多元智力测量的科学原理
  3. IN-12辉光数码管:俄罗斯进口的器件
  4. UIControl IOS控件编程 及UITextField的讲解
  5. 发展农业对话国际农民丰收节贸易会 菲律宾学中国还是印度?
  6. 昨日我是谁,今日谁是我
  7. Android NDK各版本下载
  8. 阿里云数据湖解决方案全面满足数据需求,帮助企业释放数据价值
  9. 安卓bmi项目_搭载安卓系统的智能健康一体机:上禾SH-V20
  10. 华为android强刷系统下载地址,华为P6S官方rom固件刷机包下载_华为P6S原版系统强刷升级包...
  11. 在Word中使用Quick Parts功能
  12. Android如何判断输入框是否为空
  13. 关于添加文件删除权限
  14. 领扣(LeetCode)最长和谐子序列 个人题解
  15. POJO类与javaBean类的区别
  16. python爬虫cookie
  17. 去除xp桌面图标阴影
  18. contest 12.31
  19. Python用正则表达式根据格式匹配成语,如:AABB,AABC,ABAC......
  20. 鸡啄米:C++编程入门系列之二(原码、反码与补码)

热门文章

  1. 考试酷解析——C4_Scope of a Variable
  2. 超分辨率重建之SRCNN整理总结(三)
  3. Microsoft Visual Studio 2010 下载及学习资料大全
  4. 如何上好一堂乐高课?知乎上最多赞的回答。
  5. 苹果M1 Pro和M1 Max的区别
  6. 使用TXT导出文件夹下所有文件名!
  7. 论文阅读DefectNet: Toward Fast and Effective Defect Detection缺陷网:走向快速有效的缺陷检测
  8. 零基础小白浅谈达梦数据库DCA考级分享
  9. 4.前端开发工具介绍以及下载使用
  10. 有监督 无监督 自监督 半监督 弱监督