[bzoj]1211: [HNOI2004]树的计数

来源:互联网 发布:mac os 远程桌面 编辑:程序博客网 时间:2024/05/22 02:06

此题与[HNOI2008]明明的烦恼是同类型的题目。

在处理时记得质因数分解,直接做会炸精度。以及无解时输出0。

#include <cstdio>#include <cmath>#define ll long longusing namespace std;int n,l;int dr[155];int pr[155],tot;int num[155];ll s[155],ans;inline void solve(ll x,int f){     for(int i=1;i<=l;i++)     {         if(x<=1)return;         while(x%pr[i]==0)         {num[i]+=f;x/=pr[i];}     }}int main(){register int i,j;scanf("%d",&n);for (i=1;i<=n;i++) scanf("%d",&dr[i]);for (i=2;i<=150;i++){for (j=2;j<=sqrt(i);j++){if (i%j==0) break;}pr[++l]=i;}if (n==1){if (!dr[1]) printf("1");else printf("0");return 0;}for (i=1;i<=n;i++){if (!dr[i]){printf("0");return 0;}dr[i]--;tot+=dr[i];}if (tot!=n-2){printf("0");return 0;}s[1]=1;ans=1;for (i=2;i<=22;i++) s[i]=s[i-1]*i;solve(s[n-2],1);for(i=1;i<=n;i++) solve(s[dr[i]],-1);for(int i=1;i<=l;i++)    while(num[i]--) ans*=pr[i];    printf("%lld",ans);    return 0;}


原创粉丝点击