JZOJ 5429 排列
来源:互联网 发布:热传导计算软件 编辑:程序博客网 时间:2024/06/14 10:06
排列
Description
有两个长度为
现给出
若第
答案可能很大,对
Data Constraint
保证不存在一个位置
Solution
很显然可以把问题拆成两个完全一样的问题。
把
设
设
易得
设
易得
设
通过容斥原理可得
移项可得
这样子问题就解决了,最后答案的计算只需合并两个子问题的答案即可。
Code
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,j,l) for(int i=j;i<=l;i++)#define fd(i,j,l) for(int i=j;i>=l;i--)using namespace std;typedef long long ll;const ll N=45e2,mo=1e9+7;ll f1[N],g1[N][N],f2[N],g2[N][N],a[N],b[N],c[N],d[N],e[N],least[N];int n,m,j,k,l,i,o,p,u,v;ll jc[N],ny[N],r1[N],r2[N];ll ksm(ll o,ll t){ ll yy=1; for(;t;t>>=1,o=o*o%mo) if(t%2)yy=yy*o%mo; return yy;}int min(int a,int b){if(a<b)return a;else return b;}ll C(ll a,ll b){ return (jc[a]*ny[b]%mo)*ny[a-b]%mo;}void work1(){ int k=0,v=0; fo(i,1,n)if(!r1[i])e[++k]=i; fo(i,1,k){ for(;e[i]>d[v+1]&&v<k;)v++; least[i]=v; } fo(i,0,k)g1[i][0]=1; fo(i,1,k) fo(l,1,min(least[i],i)) g1[i][l]=(g1[i-1][l]+g1[i-1][l-1]*(least[i]-l+1))%mo; f1[k]=g1[k][k]; fd(i,k-1,1){ f1[i]=g1[k][i]*jc[k-i]%mo; fo(j,i+1,k)f1[i]=(f1[i]-f1[j]*C(j,i))%mo; } f1[0]=jc[k]; fo(i,1,k)f1[0]=(f1[0]-f1[i])%mo;}void work2(){ int k=0,v=0; fd(i,n,1)if(!r2[i])e[++k]=i; fo(i,1,k){ for(;e[i]<c[v+1]&&v<k;)v++; least[i]=v; } fo(i,0,k)g2[i][0]=1; fo(i,1,k) fo(l,1,min(least[i],i)) g2[i][l]=(g2[i-1][l]+g2[i-1][l-1]*(least[i]-l+1))%mo; f2[k]=g2[k][k]; fd(i,k-1,1){ f2[i]=g2[k][i]*jc[k-i]%mo; fo(j,i+1,k)f2[i]=(f2[i]-f2[j]*C(j,i))%mo; } f2[0]=jc[k]; fo(i,1,k)f2[0]=(f2[0]-f2[i])%mo;}int main(){ cin>>n>>m; jc[0]=ny[0]=1; fo(i,1,n)jc[i]=jc[i-1]*i%mo,ny[i]=ksm(jc[i],mo-2); fo(i,1,n)scanf("%d",&a[i]); fo(i,1,n)scanf("%d",&b[i]); fo(i,1,n){ if(!a[i])d[++u]=b[i]; r1[a[i]]++; if(!b[i])c[++v]=a[i]; r2[b[i]]++; if((a[i]*b[i]))m-=(a[i]>b[i]); } sort(d+1,d+u+1); sort(c+1,c+v+1); fo(i,1,v/2)swap(c[i],c[v-i+1]); work1(); work2(); ll ans; fo(i,1,m) ans=(ans+f1[i]*f2[m-i])%mo; ans=(ans+mo)%mo; printf("%lld",ans);}
阅读全文
1 0
- JZOJ 5429 排列
- 【bzoj 3622】【JZOJ 5429】 排列
- 排列统计 jzoj 1283
- 【JZOJ 5429】【NOIP2017提高A组集训10.27】排列
- JZOJ 5253. 排列与交换
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 排列
- 微软Docs.com会泄露隐私文件,搜索功能已关闭
- 小米6配置全曝光,或搭载索尼XZ Premium同款摄像传感器
- Youtube自动字幕系统已能识别环境音,但国内还在依靠字幕组
- longest-common-prefix
- VS2015中用gets_s读取EOF
- JZOJ 5429 排列
- python中'zip' is not subscriptable
- Reading Note: Detect to Track and Track to Detect
- PTA 7-1 根据后序和中序遍历输出先序遍历(25 分) 递归输出
- Struts2中的ModelDriven机制及其运用
- 地平线首席芯片架构师周峰博士:地平线如何做到既做算法又做芯片IP
- 2017年了,微软竟因Windows10升级被告上法庭
- 雅瑞资本张瑞君:服务于产业,推动实体经济发展,营造共赢大环境非常重要
- 携手国安广视舞剑 百度意在亚马逊echo这个沛公