洛谷 P4071 [SDOI2016]排列计数
这是一道组合数学题。
对于一个长为n的序列,首先我们要选m个使之稳定\(C^{m}_{n}\)。
且要保证剩下的序列不稳定,即错排\(D_{n-m}\)。
所以答案就是:$$ANS=C^{m}{n}+D{n-m}$$
再看看数据范围:n最大\(10^6\),错排好办,直接递推:
\]
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]排列计数的更多相关文章
- 洛谷——P4071 [SDOI2016]排列计数(错排+组合数学)
P4071 [SDOI2016]排列计数 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列 ...
- 洛谷 P4071 [SDOI2016]排列计数 题解
P4071 [SDOI2016]排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳 ...
- 洛谷P4071 [SDOI2016] 排列计数 [组合数学]
题目传送门 排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷P2606 [ZJOI2010]排列计数(组合数 dp)
题意 题目链接 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案 ...
- ●洛谷P2606 [ZJOI2010]排列计数
题链: https://www.luogu.org/problemnew/show/P2606题解: 组合数(DP),Lucas定理 首先应该容易看出,这个排列其实是一个小顶堆. 然后我们可以考虑dp ...
- P4071 [SDOI2016]排列计数
题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 满足条 ...
- 洛谷P2606 [ZJOI2010]排列计数
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...
- 洛谷P2606 [ZJOI2010]排列计数(数位dp)
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...
随机推荐
- (二)Oracle学习笔记—— 序列
1. 序列简介 序列作为数据库里的对象,可以将序列值装入内存以提高访问效率,主要作用是生成唯一的主键值.其作用相当于一个计数器,它并不会与特定的表关联.通过创建Oracle序列和触发器实现表的主键自增 ...
- oracle备份还原数据库
首先到对应bin目录下打开cmd(windows),linux用相应终端链接:eg:D:\app\sun\product\11.2.0\dbhome_1\BIN 用户备份:exp u_tdms/p_t ...
- Quartz.Net线程处理用到的两个Attribute
1.DisallowConcurrentExecution 加到IJob实现类上,主要防止相同JobDetail并发执行. 简单来说,现在有一个实现了IJob接口的CallJob,触发器设置的时间是每 ...
- ibatis中<![CDATA[使用解释
http://hi.baidu.com/taoxincheng0/blog/item/3916c4ec413f03c22e2e2160.html ibatis中什么时候需要用到: <![CDAT ...
- HBase - Filter - 过滤器的介绍以及使用 | 那伊抹微笑
博文作者:那伊抹微笑 csdn 博客地址:http://blog.csdn.net/u012185296 itdog8 地址链接 : http://www.itdog8.com/thread-214- ...
- Linux Chrome Tab 标题 乱码
1. 刚装完ubuntu 14.04 英文版, 又装了google chrome 浏览器. 2. 打开chrome浏览器,发现tab也没的标题是乱码: 3. 而系统自带的firefox却没有这个问题, ...
- Atitit.单向sso 单点登录的设计与实现
Atitit.单向sso 单点登录的设计与实现 1. 单点登录sso 的三大解决方案1 2. 新方案:密码管理器方案1 3. 调用方1 4. 自动登录登录2 5. 主页跳转2 1. 单点登录sso ...
- 免费开源C# 论坛
http://stackoverflow.com/questions/255591/who-knows-a-good-free-open-source-forum-in-c 1. http://yet ...
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数
这一章节我们讨论一下扩展添加检查订单功能,以便记录并检測输入的參数. 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03 ...
- 345. Reverse Vowels of a String【easy】
345. Reverse Vowels of a String[easy] Write a function that takes a string as input and reverse only ...