题意

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. warning MSB8004: Output Directory does not end with a trailing slash.

    当在VC里编译时,发现这个警告,就是说设置的目录参数不是以反斜杠结束的目录名称,如下: 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V ...

  2. Ubuntu 16.04 安装配置支持http2的nginx

    第一步 安装最新版本的nginx 对于ubuntu16.04而言 直接装就是最新的 ``` sudo apt-get update sudo apt-get install nginx 查看Nginx ...

  3. larave 控制器中获取路由参数

    Laravel中获取路由参数Route Parameters的五种方法示例 作者:SeekerLiu 这篇文章主要给大家介绍了关于Laravel中获取路由参数Route Parameters的五种方法 ...

  4. poj 1952 最长公共子序列计数

    看代码就懂了  不解释  3 1 1 1 1 2 2 2 1 1 1 3  第一个3 和最后一个 3 只需要一个就够了,,, #include<iostream> #include< ...

  5. Java [Leetcode 383]Ransom Note

    题目描述: Given
 an 
arbitrary
 ransom
 note
 string 
and 
another 
string 
containing 
letters from
 al ...

  6. 使用OpenCV对图像进行缩放

    OpenCV:图片缩放和图像金字塔 对图像进行缩放的最简单方法当然是调用resize函数啦! resize函数可以将源图像精确地转化为指定尺寸的目标图像. 要缩小图像,一般推荐使用CV_INETR_A ...

  7. django中的locale()函数

    就是可以将函数中的变量与其对应的值,自动包裹成字典传到静态页面 参考链接:http://www.jb51.net/article/69558.htm

  8. Nginx 反向代理与负载均衡详解

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在Nginx 配置详解中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Ngin ...

  9. C#处理不规范的时间字符串

    这样的一个情景,数据中   出生日期 是存的时间方便计算,但是前台来的数据五花八门 20170101 2017.01 2017-01-01 2017年01月1日 由于特殊原因现在确实没办法规范用户输入 ...

  10. CentOS7 日期时间设置

    1.设置系统时间为中国时区并启用NTP同步 yum install ntp //安装ntp服务 systemctl enable ntpd //开机启动服务 systemctl start ntpd ...