题意

题目描述

求有多少种长度为 n 的序列 A,满足以下条件:

1 ~ n 这 n 个数在序列中各出现了一次

若第 i 个数 A[i] 的值为 i,则称 i 是稳定的。序列恰好有 m 个数是稳定的

满足条件的序列可能很多,序列数对 109+710^9+7109+7 取模。

输入输出格式

输入格式:

第一行一个数 T,表示有 T 组数据。

接下来 T 行,每行两个整数 n、m。

输出格式:

输出 T 行,每行一个数,表示求出的序列数

输入输出样例

输入样例#1:
复制

5
1 0
1 1
5 2
100 50
10000 5000
输出样例#1:
复制

0
1
20
578028887
60695423

说明

测试点 1 ~ 3: T=1000T = 1000 T=1000,n≤8 n \leq 8 n≤8,m≤8 m \leq 8 m≤8;

测试点 4 ~ 6: T=1000T = 1000 T=1000,n≤12 n \leq 12 n≤12,m≤12 m \leq 12 m≤12;

测试点 7 ~ 9: T=1000T = 1000 T=1000,n≤100 n \leq 100 n≤100,m≤100 m \leq 100 m≤100;

测试点 10 ~ 12:T=1000 T = 1000 T=1000,n≤1000 n \leq 1000 n≤1000,m≤1000 m \leq 1000 m≤1000;

测试点 13 ~ 14:T=500000 T = 500000 T=500000,n≤1000 n \leq 1000 n≤1000,m≤1000 m \leq 1000 m≤1000;

测试点 15 ~ 20:T=500000 T = 500000 T=500000,n≤1000000 n \leq 1000000 n≤1000000,m≤1000000 m \leq 1000000 m≤1000000。

分析

选出哪些元素固定,剩下的就是错排问题

错排数递推公式:

\[D_0=1,D_1=0 \\
D_n=(n-1)(D_{n-1}+D_{n-2}) \quad n\ge 2
\]

答案为

\[\binom nm D_{n-m}
\]

时间复杂度\(O(n+T)\)

代码

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
rg T data=0,w=1;rg char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') w=-1;ch=getchar();}
while(isdigit(ch)) data=data*10+ch-'0',ch=getchar();
return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll; co int N=1e6+1,mod=1e9+7;
int num[N]={1,1},inv[N]={1,1},f[N]={1,0};
il int mul(int x,int y){return (ll)x*y%mod;}
int main(){
// freopen(".in","r",stdin),freopen(".out","w",stdout);
for(int i=2;i<N;++i){
num[i]=mul(num[i-1],i);
inv[i]=mul(mod-mod/i,inv[mod%i]);
f[i]=mul(i-1,f[i-1]+f[i-2]);
}
for(int i=2;i<N;++i) inv[i]=mul(inv[i-1],inv[i]);
for(int t=read<int>(),n,m;t--;){
read(n),read(m);
printf("%d\n",mul(num[n],mul(inv[n-m],mul(inv[m],f[n-m]))));
}
return 0;
}

LG4071 [SDOI2016]排列计数的更多相关文章

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

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

  2. bzoj-4517 4517: [Sdoi2016]排列计数(组合数学)

    题目链接: 4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 846  Solved: 530[Submit][ ...

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

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

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

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

  5. BZOJ_4517_[Sdoi2016]排列计数_组合数学

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

  6. [BZOJ4517][SDOI2016]排列计数(错位排列)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1616  Solved: 985[Submit][Statu ...

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

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

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

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

  9. BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*

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

随机推荐

  1. python 类方法中参数使用默认值的方法

    class A(): __init__(self, **arg): self.__dict__.update(arg)        def M(self, config=None, section= ...

  2. Java集合排序方法comparable和comparator的总结

    一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...

  3. 第一篇 入门必备 (Android学习笔记)

    第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具   ●Android之父 Android安迪·罗 ...

  4. python验证代理IP

    接上一篇保存的IP地址,进行验证 # -*- coding: utf-8 -*- import requests from threading import Thread import threadi ...

  5. DevExpress v18.1新版亮点——Reporting篇(一)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Reporting v18.1 的新功能,快来下载试用新版本 ...

  6. Problem B: 重载函数:max

    Description 编写两个名为max的函数,它们是重载函数 ,用于求两个整数或实数的最大值.它们的原型分别是: int max(int a,int b); double max(double a ...

  7. L258 技术转让

    We will inform you of the weight, measurements, number of cases, cost of the drawings and other docu ...

  8. 解决org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cacheManager' is defined

    在Spring配置文件中加入了支持注解,即<mvc:annotation-driven/> 重新启动服务器包 org.springframework.beans.factory.NoSuc ...

  9. python 元组攻略

    1.元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义 tup1=(50,) 2.元组中的元素值使不允许修改的,但可以对元组进行连接组合复制代码 1 tup1=(12,34.56)2 tup2= ...

  10. 四条命令快速在Ubuntu16.04上配置DNS服务器

    1. apt install dnsmasq -y 2. vim /etc/dnsmasq.d/resolv.conf address=/xxx.yyy.com/21.xx.xx.x 3. servi ...