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

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

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

Input

  输入数据包含多个多个测试实例,每个测试实例占用一行,每行包含一个正整数n(1<n<=20),n表示8006的网友的人数。

Output

  对于每行输入请输出可能的错误方式的数量,每个实例的输出占用一行。

Sample Input

2
3

Sample Output

1
2

解题思路:
  本题有多组测试,每组测试给出网友人数n,要求输出信全装错的方式数量。

  这是一个典型的错排问题

  错排思路,设我们正在对第1封信进行操作,我们只需要将第1封信与后面任意一封信交换位置,设被交换的信为看,就可以满足第1封信错放的条件,共有n - 1种方法,这时对于第k封信,有两种可能性,1、将k放到位置1,对于除了1与k的其他n-2封信,又可以进行同样的操作。2、k不在位置1,那么现在还剩n-1封信n-1个信封,那么对这n-1封信又可以进行同样的操作。

  我们只需开一个数组d,以d(n)记录n封信全放错的方法数量。

  根据上面分析,可以得出d(n) = (n - 1) * [ d( n - 1) + d( n - 2)]。

  这就是错排公式。

  

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = ;
LL d[maxn];
int main()
{
int n;
memset(d, , sizeof(d)); //初始化所有全放错数量为0
d[] = ; //两封信只有一冲全放错方法
for(int i = ; i <= maxn; i++){
d[i] = (i - ) *(d[i - ] + d[i - ]);
}
//根据错排公式计算25封信以内所有答案打表
while(scanf("%d", &n) != EOF){ //输入网友数量
printf("%lld\n", d[n]); //输出答案
}
return ;
}

HDU 1465 不容易系列之一(排错公式)的更多相关文章

  1. HDU 1465 不容易系列之排错

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 大家常常感 ...

  2. HDU——1465不容易系列之一(错排公式)

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  3. HDU 1465 不容易系列之一 (错排公式+容斥)

    题目链接 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上 ...

  4. hdu 1465 不容易系列之一(错排模板)

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. hdu 1465:不容易系列之一(递推入门题)

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  6. HDOJ(HDU) 1465 不容易系列之一(错排)

    Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就 ...

  7. HDU 1465 不容易系列之一

    扯淡 貌似有傻逼的做法XD 话说我没开long long,忘读入n,忘了清零ans WA了三遍是什么操作啊 傻了傻了 思路 显然是一个错排问题啊XD 但是我们不套公式,我们用一发二项式反演 二项式反演 ...

  8. HDU - 1465 不容易系列之一(错排)

    HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟! 现在的问题是:请大家 ...

  9. HDU 1465 不容易系列之一(错排,递归)

    简而言之,就是把n个信封全部装错的可能数.(中问题,具体看题目) //当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示, //那么M(n-1)就表示n-1个编号元素放在 ...

随机推荐

  1. ASP.NET Core学习总结(3)

    我们重点来看看这个InvokeInnerFilterAsync. protected override async Task InvokeInnerFilterAsync() { var next = ...

  2. 使用RazorGenerator和预编译MVC引擎将Razor视图编译成DLL

    Web开发中常常会有跨页面.跨站点.跨项目组的复用模块(界面),最常见的就是如下方所示的Web页面上用于显示登录或用户名的头部模块, 使用ASP.NET MVC开发中,常见的做法是写成部分视图,本文的 ...

  3. python开发工具之分析

    开发工具篇之工具分析 任务:开发python程序环境:编辑器+解释器 [原始开发python] 环境:安装python (提供python解释器,命令行shell窗口,简易python编译器,第三方库 ...

  4. Linux磁盘及文件系统(二)Linux下磁盘命名和分区

    在为主机添加硬盘之前,首先需要了解Linux系统下对硬盘和分区的命令方法 一.磁盘命名 Linux下对SCSI和SATA设备是以sd命名的,第一个SCSI设备是sda,第二个是sdb....以此类推. ...

  5. Elasticsearch入门CRUD(新增、查询、修改、删除)

    1. 项目中引用 Elasticsearch.NET         Elasticsearch 其他版本可在: http://www.nuget.org/  找到对应的项目以源码 ! 本文以 2.4 ...

  6. instanceof,isinstance,isAssignableFrom,asSubclass的区别

    1,isAssignableFrom():是字节码对象的方法 是用来判断一个类的字节码对象和另一个类的字节码对象是否相同或是子类或接口. assignable英 [ə,sainəbl]美 [ə,sai ...

  7. Dubbo自定义日志拦截器

    前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...

  8. linux互传文件nc命令

    使用nc命令可以很快的在两台主机传递文件,且不需要在同一网段,只要设置好端口即可. 一.安装(CentOS下) yum install -y nc  (需要root权限,可以用加上sudo) 二.使用 ...

  9. 编译原理(一)绪论概念&文法与语言

    绪论概念&文法与语言 以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 绪论基本概念 1. 低级语言:字位码.机器语言.汇编语言.与特定的机器有关,功效高,但使用复杂.繁琐.费时 ...

  10. switch case执行顺序

    public class SwitchCase { public static void main(String[] args) { System.out.println(switchFun(4)); ...