【SDOI 2016】 排列计数
【题目链接】
https://www.lydsy.com/JudgeOnline/problem.php?id=4517
【算法】
有m个数在原来的位置上,说明有(n-m)个数不再原来的位置上
那么,我们可以选出(n-m)个数,使这(n-m)个数都不在原来的位置上,再让剩下的m个数都在原来的位置上
错位排列递推公式 :
f(1) = 0
f(2) = 1
f(n) = (n - 1)(f(n-1) + f(n-2)) (n >= 2)
因此,答案为C(n,n-m)f(n-m)
预处理错位排列数,阶乘和阶乘逆元,即可
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000010
const int P = 1e9 + ; int T,n,m,ans;
int f[MAXN],fac[MAXN],inv[MAXN]; inline int power(int a,int n)
{
int res = ,b = a;
while (n)
{
if (n & ) res = 1ll * res * b % P;
b = 1ll * b * b % P;
n >>= ;
}
return res;
}
inline void init()
{
int i;
f[] = ;
f[] = ;
f[] = ;
for (i = ; i < MAXN; i++) f[i] = 1ll * (i - ) * (f[i-] + f[i-]) % P;
fac[] = ;
for (i = ; i < MAXN; i++) fac[i] = 1ll * fac[i-] * i % P;
inv[MAXN-] = power(fac[MAXN-],P-);
for (i = MAXN - ; i >= ; i--) inv[i] = 1ll * inv[i+] * (i + ) % P;
}
inline int C(int n,int m)
{
if (n < m) return ;
if (m == ) return ;
return 1ll * fac[n] * inv[m] % P * inv[n-m] % P;
} int main()
{ init();
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
ans = 1ll * C(n,n-m) * f[n-m] % P;
printf("%d\n",ans);
} return }
【SDOI 2016】 排列计数的更多相关文章
- SDOI 2016 排列计数
题目大意:一个数列A,n个元素,其中m个元素不动,其他元素均不在相应位置,问有多少种排列 保证m个元素不动,组合数学直接计算,剩余元素错位排列一下即可 #include<bits/stdc++. ...
- BZOJ 4517: [Sdoi2016]排列计数
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 911 Solved: 566[Submit][Status ...
- bzoj-4517 4517: [Sdoi2016]排列计数(组合数学)
题目链接: 4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 846 Solved: 530[Submit][ ...
- ACM/ICPC 之 DP-浅谈“排列计数” (POJ1037)
这一题是最近在看Coursera的<算法与设计>的公开课时看到的一道较难的DP例题,之所以写下来,一方面是因为DP的状态我想了很久才想明白,所以借此记录,另一方面是看到这一题有运用到 排列 ...
- 数学(错排):BZOJ 4517: [Sdoi2016]排列计数
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 693 Solved: 434[Submit][Status ...
- 【数论·错位排列】bzoj4517 排列计数
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1428 Solved: 872[Submit][Statu ...
- BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...
- BZOJ 2111: [ZJOI2010]Perm 排列计数 [Lucas定理]
2111: [ZJOI2010]Perm 排列计数 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1936 Solved: 477[Submit][ ...
- bzoj4517排列计数 错排+组合
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1491 Solved: 903[Submit][Statu ...
- BZOJ_4517_[Sdoi2016]排列计数_组合数学
BZOJ_4517_[Sdoi2016]排列计数_组合数学 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[ ...
随机推荐
- shell 杂集
1.shell 相等比较注意 -eq 数字相等的比较 == 字符串相等的比较 2.== 和 = 的区别 == 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值. = 与 == ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by (转)
1.row_number() over()排序功能: (1) row_number() over()分组排序功能: 在使用 row_number() over()函数时候,over()里头的分组以及排 ...
- 前端学习笔记-HTML(一)
- 百度地图api的简单应用
百度地图api 获取经纬度(通过浏览器的) //获取经纬度 window.navigator.geolocation.getCurrentPosition(function(position) { a ...
- javascript中的原型对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 记一个男默女泪的 BUG
姗姗来迟的词频统计代码 BUG 的发现 1. 此前提交的第一次代码作业总结博客 http://www.cnblogs.com/ustczwq/p/8680704.html 2. BUG 本天成,妙手偶 ...
- vue-cli 2.0 常用命令
一.查询npm版本 npm -v 二.安装npm npm install npm g 三.安装webpack npm install webpack -g 四.安装vue命令行工具 npm insta ...
- python tips:类与实例的属性问题
实例是具象化的类,它可以作为类访问所有静态绑定到类上的属性,包括类变量与方法,也可以作为实例访问动态绑定到实例上的属性. 实例1: class A: work = list("hello&q ...
- python tips:文件读取——换行符的问题
问题:在windows系统中,换行的符号是'\r\n'.python在读文件的时候为了系统兼容,会默认把'\r','n','\r\n'都视作换行.但是在windows文件中,可能在同一行中同时存在'\ ...
- keepalived+mysql主主实现高可用
mysql主从配置参考我的上篇博客 主主配置就是互为主从 环境 准备应用 keepalived-2.0.2.tar.gz openssl-devel-1.0.2k-12.el7.x86_64.rpm ...