博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
阅读量:6940 次
发布时间:2019-06-27

本文共 914 字,大约阅读时间需要 3 分钟。

题意:多组询问,n的全排列中恰好m个不是错排的有多少个


容斥原理强行推♂倒她

$恰好m个不是错排 $
\[ =\ \ge m个不是错排 - \ge m+1个不是错排\binom{m+1}{m} - \ge m+2个不是错排\binom{m+2}{m}... \\ = \sum_{i=m}^n \binom{n}{i} (n-i)!\binom{i}{m} \\ = \frac{n!}{m!} \sum_{i=m}^n (-1)^{i-m} \frac{1}{(i-m)!} \]
预处理阶乘逆元前缀和就可以\(O(1)\)回答了
其实错排公式也是这么推倒来的

PS:发现题解全都是用的错排公式,等出一道你们不知道公式的题你们再用啊

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;#define fir first#define sec secondconst int N=1e6+5, P=1e9+7;inline int read() { char c=getchar(); int x=0, f=1; while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();} while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();} return x*f;}int n, m;ll inv[N], fac[N], facInv[N], s[N];int main() { freopen("permutation.in","r",stdin); freopen("permutation.out","w",stdout); inv[1]=1; fac[0]=facInv[0]=1; s[0]=1; for(int i=1; i

转载地址:http://tsfnl.baihongyu.com/

你可能感兴趣的文章
js实践3_渐变应用
查看>>
5月8--我要发,一个值得纪念的日子
查看>>
Java之命令模式(Command Pattern)
查看>>
dom4j 的小小测试
查看>>
hdu - 3572 - Task
查看>>
MySQL存储引擎之InnoDB
查看>>
最短路径
查看>>
C# DateTime 处理
查看>>
分库分表带来的完整性和一致性问题
查看>>
AMD和RequireJS初识----优化Web应用前端(按需动态加载JS)
查看>>
MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传...
查看>>
ASP.NET MVC遍历ModelState的错误信息
查看>>
现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的DataTable
查看>>
linux关于bashrc与profile的区别(转)
查看>>
文件互斥
查看>>
成为一名优秀程序员所需要知道的那些事
查看>>
Java回顾之Spring基础
查看>>
在UIImageView中旋转图像代码例子
查看>>
写商业计划书的建议
查看>>
项目的阶段性目标管理
查看>>