zoukankan      html  css  js  c++  java
  • P2624 [HNOI2008]明明的烦恼

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    typedef long long LL;
    
    inline int read()
    {
        char c=getchar();int num=0;bool f=1;
        for(;!isdigit(c);c=getchar())
            f=c=='-'?0:f;
        for(;isdigit(c);c=getchar())
            num=num*10+c-'0';
        return f?num:-num;
    }
    
    const int N=1e4+5;
    
    int n,m;
    int d[N],tot;
    
    int prime[N],cnt;
    bool flag[N];
    void init()
    {
        for(int i=2,t;i<N;++i)
        {
            if(!flag[i])
                prime[++cnt]=i;
            for(int j=1;j<=cnt&&(t=i*prime[j])<N;++j)
            {
                flag[t]=1;
                if(i%prime[j]==0)
                    break;
            }
        }
    }
    
    inline LL ksm(LL x,LL k)
    {
        LL res=1;
        while(k)
        {
            if(k&1)
                res=res*x;
            x*=x;
            k>>=1;
        }
        return res;
    }
    
    int num[N];
    
    inline void chai(int x,int f)
    {
        for(int i=1;i<=cnt&&x>1;++i)
        {
            while(x%prime[i]==0)
            {
                num[i]+=f;
                x/=prime[i];
            }
        }
        return;
    }
    
    int ans[N],l,x;
    inline void mul(int *a)
    {
        x=0;
        ans[1]=l=1;
        for(int i=1;i<=cnt;++i)
        {
            for(int j=1;j<=a[i];++j)
            {
                for(int k=1;k<=l;++k)
                {
                    ans[k]=ans[k]*prime[i]+x;
                    x=ans[k]/10;
                    ans[k]%=10;
                }
                while(x)
                {
                    ans[++l]=x%10,
                    x/=10;
                }
            }
        }
    }
    
    int main()
    {
    //    freopen("3.in","r",stdin);
    //    freopen("466.out","w",stdout);
        init();
        n=read();
        if(n==1)
        {
            n=read();
            if(n)
                putchar('0');
            else
                putchar('1');
            return 0;
        }
        for(int i=1;i<=n;++i)
        {
            d[i]=read();
            if(d[i]==0)
            {
                puts("0");
                return 0;
            }
            if(d[i]==-1)
                ++m;
            else
            {
                tot+=(d[i]-=1);
                for(int j=1;j<=d[i];++j)
                    chai(j,-1);
            }
        }
        if(tot>n-2)
        {
            puts("0");
            return 0;
        }
        for(int i=1;i<=n-2-tot;++i)
            chai(i,-1);
        for(int i=1;i<=n-2;++i)
            chai(i,1);
        if(m>1)
        {
            for(int i=1;i<=n-2-tot;++i)
                chai(m,1);
        }
        mul(num);
        for(;l;--l)
            cout<<ans[l];
        return 0;
    }
  • 相关阅读:
    闰年的定义
    Sublime Text 3
    维特比算法(Viterbi)
    索引
    倒排索引
    URL过滤
    判断一个元素是否在集合中
    布隆过滤器
    jsp九大内置对象
    jsp九大内置对象和其作用详解
  • 原文地址:https://www.cnblogs.com/lovewhy/p/9633675.html
Copyright © 2011-2022 走看看