【数论·错位排列】bzoj4517 排列计数
4517: [Sdoi2016]排列计数
Time Limit: 60 Sec Memory Limit: 128 MB
Submit: 1428 Solved: 872
[Submit][Status][Discuss]
Description
Input
Output
输出 T 行,每行一个数,表示求出的序列数
Sample Input
1 0
1 1
5 2
100 50
10000 5000
Sample Output
1
20
578028887
60695423
HINT
Source
鸣谢Menci上传
题解
错位排列个数f[i]=(f[i-1]+f[i-2])*(i-1)
证明:
假设1位于k上,则k有可能在1上
此时方案数为f[i-1]*(i-1)
或者k不在i上,但k不会出现在k上,相当于对i-2错排
所以方案数为f[i-2]*(i-1)
所以总方案数为 f[i]=(f[i-1]+f[i-2])*(i-1)
代码
//by 减维
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<map>
#include<bitset>
#include<algorithm>
#define ll long long
#define p 1000000007
using namespace std; int t,n,m;
ll jc[],ny[],f[]; ll ksm(ll x,ll y)
{
ll a=x,ret=;
while(y)
{
if(y&)ret=(ret*a)%p;
a=a*a%p;
y/=;
}
return ret;
} int main()
{
jc[]=jc[]=;ny[]=;
for(int i=;i<=;++i)
jc[i]=(jc[i-]*i)%p,ny[i]=ksm(jc[i],p-);
f[]=;f[]=;
for(int i=;i<=;++i)f[i]=(f[i-]+f[i-])%p*(i-)%p;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
printf("%lld\n",jc[n]*ny[m]%p*ny[n-m]%p*f[n-m]%p);
}
}
【数论·错位排列】bzoj4517 排列计数的更多相关文章
- bzoj4517排列计数 错排+组合
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1491 Solved: 903[Submit][Statu ...
- [Bzoj4517]排列技术(错排 + 预处理)
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1508 Solved: 915[Submit][Statu ...
- C语言 · 排列数 · 排列式
蓝桥练习场上不断碰到类似的题,都是一个递归搜索的套路. 算法提高 排列数 时间限制:1.0s 内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下 ...
- noip 1995 灯的排列问题 排列组合 DFS
题目描述 设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数). 放灯时要遵守下列规则: ①同一种颜色的灯不能分开: ②不同颜 ...
- 【数论】贝壳找房计数比赛&&祭facinv
震惊!阶乘逆元处理背后竟有如此玄机…… 题目描述 贝壳找房举办了一场计数比赛,比赛题目如下. 给一个字符串 s 和字符串 t,求出 s 的所有去重全排列中 t 出现的次数.比如aab的去重全排列为aa ...
- 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)
传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...
- 排列组合C、A
排列组合是组合学最基本的概念.所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序.组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序. 排列组合定义及公式 排列的定义:从n个不同 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 9月19日下午JavaScript数组冒泡排列和二分法
数组 一.冒泡排列 对数组attr = [1,8,6,4,5,3,7,2,9]进行由大到小排列,用冒泡排列的方法排列时,会对数组进行比较互换.如果前一个数字较大,这2个元素排列方式不变,如果后一个元素 ...
随机推荐
- C(8)
C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的,由于非常多 老师都会跳过 ...
- minicom在虚拟机(linux)安装配置过程
1. minicom须要ncurses库的支持.否则安装会有问题. A. 下载ncurses.我选择是ncurses-5.6.tar.gz 下载地址:http://directory.fsf.org/ ...
- Android事件拦截机制简单分析
前一阶段,在学习的时候,遇到了我觉得的我接触安卓以来的最多的一次事件拦截出来,那个项目,用到了slidemenu側滑菜单条,然后加上tab标签,还有轮播广告,listview上下滑动.viewpage ...
- 搭建 Keepalived + Nginx + Tomcat 的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- CS:APP3e 深入理解计算机系统_3e ShellLab(tsh)实验
详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. ...
- LR接口压力测试实战(限量抢红包接口)
一.业务描述:微信群中,运营人员放出活动链接,用户单击活动链接进入活动页面如下图,用户输入手机号抢红包(红包数量有限) 二.接口测试代码 Action() { lr_rendezvous(" ...
- JavaScript基础1——基本概念
关于JS的概念 JavaScript 是一种弱类型语言. JavaScript 是一种客户端脚本语言(脚本语言是一种轻量级的编程语言). JavaScript是基于对象的.(因为面向对象需要具有封装. ...
- iOS控制器跳转动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 MyViewController *myVC = [[MyViewController alloc]init]; //创建动画 C ...
- 如何在阿里云linux上部署java项目
前2天把git练了下,敲了很多命令,也借助图形界面增强自己的理解,乘着余热把linux在熟悉下.然后想起以前婷主有让我帮忙搭建的阿里云服务器,所以就想自己试着在阿里云的linux上搭建自己的jav ...
- c#中treeview的使用方法(转 )
本文主要介绍treeView控件中,添加,修改.删除节点的操作, 首先当窗体加载的时候,我们添加上图中所示的节点. 当点击“Delete the Selected”按钮时,被选中的节点将被删除. 当点 ...