求有多少种长度为 n 的序列 A,满足以下条件:
1 ~ n 这 n 个数在序列中各出现了一次
若第 i 个数 A[i] 的值为 i,则称 i 是稳定的。序列恰好有 m 个数是稳定的
满足条件的序列可能很多,序列数对 10^9+7 取模。

在uoj群里问逆元,被神犇们裱了一通,好在是学会了
n个数中有m个数是稳定的,那么确定这m个数有C(n,m)种方法
那么剩下的n-m个数的要求就是第i个数不是i
思考了一波没想出来。。。。
然后问了一下发现有错排公式。。就是这个问题,这就很尴尬了。。
然后有个问题就是要注意 $$D[0] = 1$$ ,另外还有 $$ine[1] = 1$$
求n!的逆元除了暴力exgcd以外还有一种方法就是 $$ine[n!] = ine[(n+1)!]*(n+1)$$
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define for1(i, x, y) for(int i = (x); i <= (y); i ++)
#define for2(i, x, y) for(int i = (x); i >= (y); i --)
#define LL long long
#define inf 2147483647
#define MOD 1000000007
#define eps 1e-7

inline LL read(){
    char ch = getchar(); LL x = 0, f = 1;
    while(ch < '0' || ch > '9'){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while('0' <= ch && ch <= '9'){
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

inline LL exgcd(LL &x, LL &y, LL a, LL b){
    if(b == 0){
        x = 1; y = 0;
        return a;
    }
    LL ret = exgcd(x, y, b, a % b);
    LL t = x; x = y; y = t - a / b * x;
    return ret;
}

inline LL inv(LL a, LL p){
    LL x, y; LL d = exgcd(x, y, a, p);
    if(d == 1) return (x + p) % p;
}

LL fac[1000010], ine[1000010], D[1000010];

int main(){
    LL T = read();
    //C(n,m)*D(n-m)
    fac[0] = 1; for(LL i = 1; i <= 1000000; i ++) fac[i] = fac[i - 1] * (LL)i % MOD;
    LL o = fac[1000000]; ine[1000000] = inv(fac[1000000], MOD);
    ine[0] = 1; for(LL i = 999999; i >= 1; i --) ine[i] = ine[i + 1] * (i + 1) % MOD;
    D[0] = 1;D[1] = 0; D[2] = 1;
    for(LL i = 3; i <= 1000000; i ++) D[i] = (i - 1) * (D[i - 2] + D[i - 1]) % MOD;
    while(T --){
        LL n = read(), m = read();
        LL ans = fac[n] * ine[n - m] % MOD * ine[m] % MOD;
        ans = ans * D[n - m] % MOD;
        printf("%lld\n", ans);
    }
    return 0;
}


BZOJ4517——[Sdoi2016]排列计数的更多相关文章

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

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

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

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

  3. bzoj4517[Sdoi2016]排列计数(组合数,错排)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1792  Solved: 1111[Submit][Stat ...

  4. [BZOJ4517] [Sdoi2016] 排列计数 (数学)

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

  5. 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)

    传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...

  6. BZOJ4517: [Sdoi2016]排列计数

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

  7. bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得

    这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+ ...

  8. bzoj千题计划282:bzoj4517: [Sdoi2016]排列计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=4517 组合数+错排公式 #include<cstdio> #include<ios ...

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

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

随机推荐

  1. Objective 多态

    多态的特点 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了. ...

  2. 手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  3. WPF:父窗口与子窗口的层次关系

    关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow 1,如果弹出窗体(比如S ...

  4. IIS------无法打开登录所请求的数据库 "company"。登录失败。 用户 'IIS APPPOOL\AppPool 4.0' 登录失败。

    链接: http://www.cnblogs.com/VortexPiggy/archive/2013/04/06/3002055.html

  5. Java数据库——ResultSet接口

    使用SQL中的SELECT语句可以查询出数据库的全部结果,在JDBC的操作中数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 从user表中查询数据 //=== ...

  6. 第3章 jQuery的DOM操作

    一.  DOM 分为DOM核心,HTML-DOM和CSS-DOM 1.DOM核心 不专属与javascript. 获取对象:document.getElementsByTagName('div') 获 ...

  7. yourphp的eq作用

    <eq name="> <span style="color:#090">是</span> <else /> 否 < ...

  8. C语言中qsort函数用法

    C语言中qsort函数用法-示例分析    本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...

  9. linq group join

    本篇介绍Linq的Group和Join操作,继续使用<Linq 学习(3) 语法结构>中介绍的数据源. GroupGroup是进行分组操作,同SQL中的Group By类似.原型如下: p ...

  10. 使用phpize增加php模块

    一,phpize的好处 什么时候我们要用phpize呢?我们在安装php时: ./configure --prefix=/apps/product/php --with-config-file-pat ...