题意

n个数字,要求至少k个数字位置不变,其余进行错排的方案数

分析

错排公式:

D(n)=(n-1)[D(n-2)+D(n-1)]

 如果n个数字,i个数字位置不变,其余进行错排的的方案数是C(n,i)*D[n-i]

那么题目的答案显然就是从k枚举到n,然后把所有的方案数加起来,这样显然是正确的,但是等等!这样会超时(而且也会MLE)!因为k很    小而n比较大!

所以我们可以把问题反过来。枚举从0到k-1,把方案数加起来,再用n的全排列减去这个方案数的和,这样就可以在时间范围内解决啦

等等,WA掉了!一脸懵逼的开始试数据。当试了一个n=13,k=1的时候发现是个负的!也就是这个错排的方案数大于了全排列的方案数,所以相减变成了负的!可是这怎么可能!

这是可能的,因为,我们取模了!所以此时错排方案数还没有超过MOD值但是全排列超过了,所以反而全排列要小。为了解决这个我们只要在相减的时候先加上一个MOD再相减就可以了~

 #include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream> using namespace std;
const int maxn=+;
const int MOD=;
int T,k;
long long n,ans;
long long c[maxn][],D[maxn],A[maxn];
void init(){
D[]=; D[]=;D[]=;
for(int i=;i<=;i++){
D[i]=((i-)*(D[i-]+D[i-])%MOD)%MOD;
}
c[][]=,c[][]=;
for(int i=;i<=;i++){
c[i][]=;
for(int j=;j<=min(i,);j++){
c[i][j]=(c[i-][j-]+c[i-][j])%MOD;
}
}
A[]=;
for(int i=;i<=;i++){
A[i]=(A[i-]%MOD*i%MOD)%MOD;
}
return ;
}
int main(){
init();
scanf("%d",&T);
for(int t=;t<=T;t++){
ans=;
scanf("%lld%d",&n,&k); //cout<<D[n]<<endl;
//cout<<A[n]<<endl;
for(int i=;i<k;i++){
int res=(c[n][i]%MOD*D[n-i]%MOD)%MOD;
ans=(ans+res)%MOD;
}
ans=(A[n]-ans+MOD)%MOD;
/* for(int i=k;i<=n;i++){
int res=(c[n][i]%MOD*D[n-i]%MOD)%MOD;
ans=(ans+res)%MOD;
}*/
printf("%lld\n",ans);
}
return ;
}
/*
100
5 1
76
7 4
92
8 5
141
13 1
-63772160
52 10
273085312
*/

FZU2282 Wand的更多相关文章

  1. wand(weak and)算法基本思路

    一般搜索的query比较短,但如果query比较长,如是一段文本,需要搜索相似的文本,这时候一般就需要wand算法,该算法在广告系统中有比较成熟的应该,主要是adsense场景,需要搜索一个页面内容的 ...

  2. Wand FZU - 2282 全错位重排

    N wizards are attending a meeting. Everyone has his own magic wand. N magic wands was put in a line, ...

  3. foj Problem 2282 Wand

     Problem 2282 Wand Accept: 432    Submit: 1537Time Limit: 1000 mSec    Memory Limit : 262144 KB Prob ...

  4. K - Wand(组合数+错排公式)

    N wizards are attending a meeting. Everyone has his own magic wand. N magic wands was put in a line, ...

  5. Python 资源大全中文版

    Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...

  6. SAP 出库单新版

    *&---------------------------------------------------------------------* *& Report  ZSDR045 ...

  7. ABAP 出库单打印 产品 A搭A A搭B显示方式

    *&---------------------------------------------------------------------* *& Report   *& ...

  8. hdu-1179-二分图最大匹配

    Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  9. C++之路进阶——HDU1880(魔咒词典)

    ---恢复内容开始--- New~ 欢迎参加2016多校联合训练的同学们~ 魔咒词典 Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 3 ...

随机推荐

  1. 接口测试基础——第5篇xlrd模块

    读取Excel表格中的内容,不多说,直接上代码: # coding: utf-8 import xlrd # excel路径 excel_path = r'C:\Users\weiming\Deskt ...

  2. python的正则re模块

    一. python的正则 python的正则模块re,是其内置模块,可以直接导入,即import re.python的正则和其他应用的正则及其相似,有其他基础的话,学起来还是比较简单的. 二. 正则前 ...

  3. UI多线程调用:线程间操作无效: 从不是创建控件"Form1"的线程访问它.

    有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数. 问题原因是.net2.0以后拒绝多 ...

  4. MD5中Java和Js配套实现

    MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现.将数据(如汉 ...

  5. python 函数名,闭包

    1.函数名字的应用 函数名是什么? 函数名是函数的名字,本质:变量,特殊变量 函数名+() ———>执行此函数: 2.函数名的赋值: def func2(): print(44) f = fun ...

  6. 在idea下两个项目之间的maven父子级项目依赖

    配置:idea 在一个项目中的父子级依赖网上轮子太多,我就不重复造了,留个链接 http://www.cnblogs.com/tibit/p/6185704.html 说说一些我自己注意的问题,在pr ...

  7. STM32F103外部晶振由8M变为12M

    STM32官方提供的库文件中,HSE(外部高速时钟)默认为8MHz,最高主频为8*9=72MHz,如果将HSE变为12MHz,不修改库文件的话,最高主频则变为12*9=108MHz,最典型的问题就是U ...

  8. ubutun

    地址:http://www.cnblogs.com/dutlei/archive/2012/11/20/2778327.html

  9. 【openCV学习笔记】【1】如何载入一张图片

    直接看代码好了 #include <iostream> #include <opencv/highgui.h>//这里主要用到窗口显示 int main(int argc, c ...

  10. ubuntu为什么没有/etc/inittab文件? 深究ubuntu的启动流程分析

    Linux 内核启动 init ,init进程ID是1,是所有进程的父进程,所有进程由它控制. Ubuntu 的启动由upstart控制,自9.10后不再使用/etc/event.d目录的配置文件,改 ...