【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[ ...
随机推荐
- python爬虫:爬取易迅网价格信息,并写入Mysql数据库
本程序涉及以下方面知识: 1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html 2.爬取中文网站以及各种乱码处 ...
- MySQL快速创造百万测试数据
CREATE TABLE `vote_record_memory` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `user_id` VARCHAR (20) NO ...
- python安装Django需要环境
Django==1.10.3 -e git+https://github.com/duoshuo/duoshuo-python-sdk.git#egg=duoshuo-python-sdk djang ...
- ZBrush快捷键与鼠标操作
ZBrush是一款3D图形绘制软件,功能十分强大,且比较复杂,除了菜单栏功能按钮,ZBrush还提供了一系列快捷键与鼠标操作,熟练掌握ZBrush快捷键与鼠标操作,可以帮助您大大节省图形创作时间.下面 ...
- Python 数据清洗--处理Nan
参考:http://blog.sina.com.cn/s/blog_13050351e0102xfis.html https://www.sogou.com/link?url=DOb0bgH2eKh1 ...
- hibernate增删改查总结
hibernate操作的都是基于对象的(曾save删delete改update) 进行hql查询是设置参数从零开始(session.setParameter(0,#)) hql查询设置参数可以是其他( ...
- element table 组件内容换行方案
element table 组件内容换行方案 white-space的值: normal 默认.空白会被浏览器忽略.pre 空白会被浏览器保留.其行为方式类似 HTML 中的<pre> 标 ...
- Java JDK 1.7 和 JDK 1.8 新特性
0 引言 本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性. 1 JDK 1.7 新特性 1. switch可以接受String类型: public class Switch { pu ...
- [luogu2272 ZJOI2007] 最大半连通子图 (tarjan缩点 拓扑排序 dp)
传送门 题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向 ...
- 3.1、Ansible命令简要说明及初步使用
1.Ansible命令 1.1 Ad-hoc说明 Ansible中有一个很重要的功能就是可以执行ad-hoc命令,它表示即时.临时的意思,即表示一次性的命令.与之相对的是ansible playboo ...