HDU4390Number Sequence(容斥原理)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=4390
題意:
有一個長度為n的序列,b1,b2,b3,,,,,bn;
尋找一個長度也為n的序列 使得滿足以下條件
1) a1*a2*...*an=b1*b2*...*bn;
2)ai>1;
分析:
很明顯就是把bi的所有素因子統計以下,然後重新組合分成n份。
我們先回顧以下一個子問題。
把m個相同的球分到n個不相同的容器裡,每個容器能為空。
擋板法:
ans = C(n+m-1,n-1);
然後我們就來了思路了 因為ai大於1,說明不能為空。我們可以從反面
來考慮,先求出一共所有的方案數num1,然後再通過容斥原理來求出,至少
存在一個為空的方案數num2。
ans = num1 - num2.
程式碼如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=1005;
const int MOD=1000000007;
int p[maxn];
int a[maxn];
LL c[maxn][maxn];
void init(){
int i,j;
for(i=0;i<maxn;i++){
c[i][i]=c[i][0]=1;
for(j=1;j<i;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%MOD;
}
}
int getnum(int m,int n){
return c[m+n-1][n-1];
}
LL solve(int cnt,int n){
int i,j;
LL ans=1;
for(i=0;i<=cnt;i++)
ans=(ans*getnum(a[i],n))%MOD;
for(i=1;i<n;i++)
{
LL tmp=c[n][i];
for(j=0;j<=cnt;j++)
tmp=(tmp*getnum(a[j],n-i))%MOD;
if(i&1)
ans=((ans-tmp)%MOD+MOD)%MOD;
else
ans=(ans+tmp)%MOD;
}
return ans;
}
int main()
{
init();
int n;
while(~scanf("%d",&n))
{
int t,i,j;
int cnt=0;
for(i=0;i<n;i++){
scanf("%d",&t);
for(j=2;j*j<=t;j++){
while(t%j==0){
p[cnt++]=j;
t/=j;
}
}
if(t>1)
p[cnt++]=t;
}
sort(p,p+cnt);
a[0]=1;
i=0;
for(j=1;j<cnt;j++){
if(p[j]==p[j-1])
a[i]++;
else
a[++i]=1;
}
cnt=i;
printf("%I64d\n",solve(cnt,n));
}
return 0;
}
相關文章
- 容斥原理
- 【模板】容斥原理
- 容斥原理講解
- 遊戲裡面的容斥原理遊戲
- 容斥原理學習筆記筆記
- 容斥原理——數學知識
- #19. 計數(容斥原理)
- HDU 4059 The Boss on Mars ( 容斥原理)
- HDU4407Sum ( 容斥原理)
- 容斥
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- HDU2841 Visible Trees (容斥原理)
- 反射容斥反射
- bzoj 2655: calc [容斥原理 伯努利數]
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- Min-Max 容斥
- lg容斥與反演
- HDU 4135 Co-prime(容斥原理+分解質因數)
- cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
- P1447 [NOI2010] 容斥原理
- HDU 4135——Co-prime(容斥原理&&二進位制列舉)
- 有標號DAG計數 [容斥原理 子集反演 組合數學 fft]FFT
- 容斥定理 AtCoder——FizzBuzz Sum Hard
- bzoj1853: [Scoi2010]幸運數字(容斥原理)
- HDU 5072 Coprime (單色三角形問題+容斥原理)
- Min-Max 容斥學習筆記筆記
- 利用容斥原理求尤拉計劃565題的S(1E9,2017)
- bzoj1042: [HAOI2008]硬幣購物(Dp+容斥原理)
- [BZOJ4818][Sdoi2017][容斥原理][矩陣優化DP]序列計數矩陣優化
- ZOJ 3868 GCD Expectation (容斥+莫比烏斯反演)GC
- HDU 1695 GCD (容斥 + 莫比烏斯反演)GC
- POJ 3904 Sky Code (容斥+莫比烏斯反演)
- 2014ACM/ICPC亞洲區西安站 F題 color (組合數學,容斥原理)ACM
- sequence to sequence模型模型
- CodeForces571A. Lengthening Sticks(組合數學-容斥)
- 機率期望進階 + Min-Max容斥 練習題
- 「數學」助力每一個不知死活的容斥夢