洛谷——P4071 [SDOI2016]排列计数(错排+组合数学)
P4071 [SDOI2016]排列计数
求有多少种长度为 n 的序列 A,满足以下条件:
1 ~ n 这 n 个数在序列中各出现了一次
若第 i 个数 A[i] 的值为 i,则称 i 是稳定的。序列恰好有 m 个数是稳定的
满足条件的序列可能很多,序列数对 $10^9+7$取模。
显然此题的答案就是$C(n,m)*d[n-m]$
求解组合数$C(n,m)$使用通项公式$\frac{n!}{m!\times (n-m)!}$
由于$n,m$很大,所以要预处理出$n!$
由于$10^9+7$是个质数,所以根据费马小定理求逆元
错排公式 $d_n=(n-1)*(d_{n-1}+d_{n-2})$
$d_1=0,d_2=1$
推导方法:
错排吗,每一个数都不在其原来的位置上
1.假设把$n$放在$k$($k<n$)上,那么就有$n-1$种方法
2.考虑放$k$,若把$k$放在位置$n$上,有$d_{n-2}$,反之有$d_{n-1}$种方法
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm> #define LL long long
#define N 1000005
#define mod (LL)1000000007
using namespace std; LL d[N],T,inv[N],f[N]; LL pow(LL a,LL b){
LL s=;
for(;b;b>>=,a=a*a%mod)
if(b&) s=s*a%mod;
return s;
} LL C(LL n,LL m){
LL del=(inv[m]%mod*inv[n-m]%mod)%mod;
LL x;
if(del<=N-) x=inv[n]*f[del]%mod;
else x=inv[n]*pow(del,mod-)%mod; return (x%mod+mod)%mod;
} int main()
{
scanf("%lld",&T);
d[]=,d[]=;
for(int i=;i<=N-;i++) d[i]=(((i-)%mod)*(d[i-]+d[i-])%mod)%mod;
inv[]=;
for(int i=;i<=N-;i++) inv[i]=inv[i-]*i%mod;
f[]=;
for(int i=;i<=N-;i++) f[i]=(mod-mod/i)*f[mod%i]%mod;
while(T--){
LL n,m;
scanf("%lld%lld",&n,&m);
if(n==m) printf("1\n");
else printf("%lld\n",C(n,m)*d[n-m]%mod);
} return ;
}
~~蒟蒻(博主)又刷了一道水题。。。~~
洛谷——P4071 [SDOI2016]排列计数(错排+组合数学)的更多相关文章
- 洛谷 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 ...
- 洛谷 P4071 [SDOI2016]排列计数
洛谷 这是一道组合数学题. 对于一个长为n的序列,首先我们要选m个使之稳定\(C^{m}_{n}\). 且要保证剩下的序列不稳定,即错排\(D_{n-m}\). 所以答案就是:\[ANS=C^{m}_ ...
- BZOJ 4517: [Sdoi2016]排列计数 错排公式
4517: [Sdoi2016]排列计数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4517 Description 求有多少种长度为 ...
- BZOJ 4517: [Sdoi2016]排列计数 错排+逆元
4517: [Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i, ...
- BZOJ 4517: [Sdoi2016]排列计数 错排 + 组合
从 $n$ 个数中选 $m$ 个不错排,那就是说 $n-m$ 个数是错排的. 用组合数乘一下就好了. Code: #include <cstdio> #include <algori ...
- bzoj4517排列计数 错排+组合
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1491 Solved: 903[Submit][Statu ...
- 洛谷P1595 信封问题 题解 错排问题
作者:zifeiy 标签:排列组合,错排问题 题目链接:https://www.luogu.org/problem/P1595 题目描述:某人写了n封信和n个信封,如果所有的信都装错了信封.求所有信都 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
随机推荐
- ios21--xib例子
故事板控制器: // // XMGViewController.m // 03-综合练习 // // Created by xiaomage on 15/12/28. // Copyright © 2 ...
- Linux/Android——usb触摸屏驱动 - usbtouchscreen (一)【转】
本文转载自:http://blog.csdn.net/jscese/article/details/41827495 最近需要往TV上装一个触摸屏设备,现在比较常见的就是使用usb接口的触摸框,适用于 ...
- [CF348B]Apple Tree
https://www.zybuluo.com/ysner/note/1300249 题面 给一棵大小为\(n\)的树,树的每个叶子节点上有权值. 定义一颗树平衡:对于每一个结点\(u\)的子树都拥有 ...
- MySql 5.7 Archive 版本安装失败 解决过程
下载地址 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 按照网络教程: 创建my.ini 文件,并填写配置内容: [mysql] # ...
- 基于PHP自带的mail函数实现发送邮件以及带有附件的邮件功能
PHPmail函数简介 bool mail ( string $to , string $subject , string $message [, string $additional_headers ...
- spring cloud config搭建说明例子(四)-补充配置文件
服务端 ConfigServer pom.xml <dependency> <groupId>org.springframework.cloud</groupId> ...
- CF482C Game with Strings
题意 你和你的朋友玩一个游戏,游戏规则如下. 你的朋友创造 n 个长度均为 m 的不相同的字符串,然后他随机地选择其中一个.他选择这些字符串的概率是相等的,也就是说,他选择 n 个字符串中的每一个的概 ...
- Poj 3177 Redundant Paths (双连通分支+节点统计)
题目描述: 给出一个无向的连通图,问最少加入几条边,才能使所给的图变为无桥的双连通图? 解题思路: 可以求出原图中所有的不包含桥的所有最大连通子图,然后对连通子图进行标记缩点,统计度为1的叶子节点le ...
- BFS(最短路) HDU 2612 Find a way
题目传送门 /* BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 */ /***************************************** ...
- DHTML_____window对象属性
<html> <head> <meta charset="utf-8"> <title>window对象属性</title&g ...