洛谷

这是一道组合数学题。

对于一个长为n的序列,首先我们要选m个使之稳定\(C^{m}_{n}\)。

且要保证剩下的序列不稳定,即错排\(D_{n-m}\)。

所以答案就是:$$ANS=C^{m}{n}+D{n-m}$$

再看看数据范围:n最大\(10^6\),错排好办,直接递推:

\[D[i]=(i-1)*(D[i-1]+D[i-2])
\]

D[0]=1,D[1]=0。

而组合数部分有点麻烦。$$C[i][j]=C[i-1][j]+C[i-1][j-1]$$

用上面这个公式可以做1000的点,\(n^2\)递推。

至于满分,我们可以用普通的组合数公式:$$C(n,m)=n!/[(n-m)!m!]$$

我们预处理ni[]表示x的阶乘。

接下来很好做了,除法取模涉及逆元,因为模数是质数,直接费马\(t^{\texttt{mod}-2}\)

所以代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int mo=1e9+7;
int n,m;
ll D[1000001]={1,0,1},ni[1000001]={1}; void pre()
{
for (int i=3;i<=1000000;++i)
D[i]=(i-1)*(D[i-1]+D[i-2])%mo;
for (int i=1;i<=1000000;++i)
ni[i]=ni[i-1]*i%mo;
} ll qpow(ll x)
{
ll p=mo-2,d=1;
while (p) {
if (p&1) d=d*x%mo;
x=x*x%mo;p>>=1;
}
return d;
} int main()
{
pre();
int T;cin>>T;
while (T--) {
scanf("%d%d",&n,&m);
ll C=ni[n]*qpow(ni[m]*ni[n-m]%mo)%mo;
printf("%lld\n",C*D[n-m]%mo);
}
return 0;
}

洛谷 P4071 [SDOI2016]排列计数的更多相关文章

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

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

  2. 洛谷 P4071 [SDOI2016]排列计数 题解

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

  3. 洛谷P4071 [SDOI2016] 排列计数 [组合数学]

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

  4. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  5. 洛谷P2606 [ZJOI2010]排列计数(组合数 dp)

    题意 题目链接 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案 ...

  6. ●洛谷P2606 [ZJOI2010]排列计数

    题链: https://www.luogu.org/problemnew/show/P2606题解: 组合数(DP),Lucas定理 首先应该容易看出,这个排列其实是一个小顶堆. 然后我们可以考虑dp ...

  7. P4071 [SDOI2016]排列计数

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

  8. 洛谷P2606 [ZJOI2010]排列计数

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

  9. 洛谷P2606 [ZJOI2010]排列计数(数位dp)

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

随机推荐

  1. python with上下文的浅谈

    python中的with一般用于上下文管理,什么是上下文管理,其实平时我们经常会用到,比如连接数据库 查询数据,操作完成后关闭连接. 还比如打开文件写入数据等操作. 具体实例: class Myres ...

  2. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等

    一.修改最大连接数 1.查看当前文件描述符的限制数目的命令: ulimit -n 2.修改文件描述符的限制数目 2.1 临时改变当前会话: ulimit -n 65536 2.2 永久变更需要下面两个 ...

  3. Android开发之用双缓冲技术绘图

    双缓冲技术主要用在画图,动画效果上,其原理就是:将资源先载入到缓冲区,然后再将缓冲区整个载入到View上面去. 双缓冲技术可以有效防止闪烁,提高显示质量. DrawView.java: package ...

  4. org.apache.jasper.compiler.TldLocationsCache tldScanJar

    我在页面上一点击查询.console以下就有例如以下的红色文字: 2014-8-19 15:09:27 org.apache.jasper.compiler.TldLocationsCache tld ...

  5. 142. O(1) Check Power of 2【easy】

    142. O(1) Check Power of 2[easy] Using O(1) time to check whether an integer n is a power of 2. Have ...

  6. unity3d 动画卡帧 动画合成 动画层次

    2013-02-26 16:22 2059人阅读 评论(0) 收藏 举报 unity3d 中动画的添加   http://unity3d.com/support/documentation/Manua ...

  7. script 标签里的 async 和 defer

    无 async 和 defer 浏览器立即加载并执行指定脚本(读到即加载并执行),阻塞文档解析 async 脚本的加载执行和文档的加载渲染 并行. defer 脚本的加载和文档的加载渲染并行,但脚本的 ...

  8. ios - UILabel_长按复制

    1.添加长按的手势 UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] initWith ...

  9. Ubuntu下MongoDB的安装和使用

    本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过.(2017.09.07) 安装MongoDB MongoDB安装很简单, ...

  10. 针对中科院java接口的用法和问题

    1.下载附加的中科院分词工具包(要下载的到我的博客里面免费下载就可以) 2.解压后会看到例如以下几个目录 3.把java工程导入eclipse中.点击import.再选择existing projec ...