博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
清北学堂模拟赛day7 错排问题
阅读量:5157 次
发布时间:2019-06-13

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

/*考虑一下已经放回m本书的情况,已经有书的格子不要管他,考虑没有书的格子,不考虑错排有(n-m)!种,在逐步考虑有放回原来位置的情况,已经放出去和已经被占好的格子,不用考虑,剩下全都考虑,设t=x∩y,把除t以外的搞一下容斥就行了*/#include
#include
#include
#include
#include
#include
#include
#define ll long long#define fo(i,l,r) for(int i = l;i <= r;i++)#define fd(i,l,r) for(int i = r;i >= l;i--)using namespace std;const int maxn = 100050;const ll mod = 1000000007LL;ll read(){ ll x=0,f=1; char ch=getchar(); while(!(ch>='0'&&ch<='9')){ if(ch=='-')f=-1;ch=getchar();}; while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}; return x*f;}ll n,m,x[maxn],y[maxn],rec[maxn],c[maxn];bool usd[maxn];ll ans,fac[maxn];ll q_pow(ll a,ll b){ ll ret = 1; while(b){ if(b&1) ret = (ret*a) % mod; a = (a*a) % mod; b >>= 1; } return ret;}inline ll inv(ll x){ return q_pow(x,mod-2);}int main(){ freopen("problem.in","r",stdin); freopen("problem.out","w",stdout); n = read();m = read(); fo(i,1,m) x[i] =read(),y[i]=read(); fo(i,1,m){ usd[x[i]] = true; usd[y[i]] = true; } int t = n; fo(i,1,n) if(usd[i]) t--; fac[0] = fac[1] = 1; fo(i,2,n) fac[i] = (fac[i-1]*i) % mod; c[0] = c[t] = 1; if(t > 0) c[1] = c[t-1] = t; fo(i,2,t-2)c[i] = ((c[i-1]*(t-i+1)%mod)*inv(i))%mod; ans = fac[n-m]; fo(i,1,t){ if(i&1) ans = (ans + 100*mod - (c[i]*fac[n-m-i]) % mod) % mod; else ans = (ans + (c[i]*fac[n-m-i]) % mod) % mod; } cout<

 

转载于:https://www.cnblogs.com/hyfer/p/6035333.html

你可能感兴趣的文章
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>