题目

传送门:QWQ

分析

$ O(nlogn) $预处理出阶乘和阶乘的逆元,然后求组合数就成了$O(1)$了。

最后再套上错排公式:$ \huge d[i]=(i-1) \times (d[i-1] + d[i-2])$其中$ d[i] $表示把i个数错排的方式数量,其中$d[1]=0,d[2]=1$

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9+;
const int maxn = ;
ll inv[maxn+], jc[maxn+], jc_inv[maxn+], d[maxn+];
void exgcd(ll a,ll b,ll& x,ll& y) {
if(!b) {x=;y=;return;}
exgcd(b,a%b,y,x); y-=x*(a/b);
}
ll inverse(ll a) {
ll x,y;
exgcd(a,MOD,x,y);
x = (x+MOD)%MOD;
return x;
}
void init() {
jc[]=; d[]=; d[]=; jc_inv[]=;
for(int i=;i<maxn;i++) {
jc[i] = (jc[i-]*ll(i)) % MOD;
jc_inv[i] = inverse(jc[i]);
if(i>) d[i] = ((i-) *(d[i-] + d[i-])) % MOD;
}
} ll C(ll n, ll m) {
return jc[n] * jc_inv[m] % MOD * jc_inv[n-m] % MOD;
}
int main() {
init();
int t; scanf("%d",&t);
while(t--) {
ll n, m; scanf("%lld%lld",&n,&m);
ll ans = C(n,m) * d[n-m] % MOD;
printf("%lld\n",ans);
}
}

【BZOJ】4517 [Sdoi2016]排列计数(数学+错排公式)的更多相关文章

  1. BZOJ4517:[SDOI2016]排列计数(组合数学,错排公式)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  2. 数学(错排):BZOJ 4517: [Sdoi2016]排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 693  Solved: 434[Submit][Status ...

  3. BZOJ 4517: [Sdoi2016]排列计数 错排公式

    4517: [Sdoi2016]排列计数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4517 Description 求有多少种长度为 ...

  4. BZOJ 4517: [Sdoi2016]排列计数 错排+逆元

    4517: [Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i, ...

  5. BZOJ 4517: [Sdoi2016]排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 911  Solved: 566[Submit][Status ...

  6. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  7. Bzoj 4517: [Sdoi2016]排列计数(排列组合)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MB Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ...

  8. 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排

    [BZOJ4517][Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值 ...

  9. 洛谷——P4071 [SDOI2016]排列计数(错排+组合数学)

    P4071 [SDOI2016]排列计数 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列 ...

  10. BZOJ 4517: [Sdoi2016]排列计数 错排 + 组合

    从 $n$ 个数中选 $m$ 个不错排,那就是说 $n-m$ 个数是错排的. 用组合数乘一下就好了. Code: #include <cstdio> #include <algori ...

随机推荐

  1. 1.2.2 Text_Reverse

    Text Reverse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Proble ...

  2. jQuery -- 如何使用jQuery判断某个元素是否存在

    通常我们要判断某个元素是否存在是用: if(document.getElementById('example')) { // do something } else { // do something ...

  3. 第十章 企业项目开发--分布式缓存Redis(2)

    注意:本章代码是在上一章的基础上进行添加修改,上一章链接<第九章 企业项目开发--分布式缓存Redis(1)> 上一章说了ShardedJedisPool的创建过程,以及redis五种数据 ...

  4. matlab与vs混合编程/matlab移植

    前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部 ...

  5. HDU1212 大数膜

    大数MOD #include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm& ...

  6. .NET 之 垃圾回收机制GC

    一.GC的必要性 1.应用程序对资源操作,通常简单分为以下几个步骤:为对应的资源分配内存 → 初始化内存 → 使用资源 → 清理资源 → 释放内存. 2.应用程序对资源(内存使用)管理的方式,常见的一 ...

  7. LG1397 [NOI2013]矩阵游戏

    题意 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][ ...

  8. test20180828

    所有试题限制都为512MB,1Sec 总分230. 试题1 新的开始 [题目描述] 发展采矿业当然首先得有矿井, 小FF花了上次探险获得的千分之一的财富请人在岛上挖了n口矿井, 但他似乎忘记考虑的矿井 ...

  9. shell学习笔记汇总

    1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...

  10. TFTP error: 'Only absolute filenames allowed' (2)

    hisilicon # tftp 0x82000000 u-boot-hi3518ev200.bin Hisilicon ETH net controler MAC: ----- eth0 : phy ...