天天看點

bzoj1005--明明的煩惱

import java.math.BigInteger;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        int[] du = new int[1500];
        int[] fur = new int[1500];
        int sum = 0;
        int q=0;
        int tot=-1;
        boolean isok = true;
        for(int i=0;i<n;i++){

            du[i]=cin.nextInt();
            if(du[i]==0) isok=false;
            if(du[i]!=-1){

                fur[++tot]=du[i]-1;
                sum+=fur[tot];
            }
            else q++;
        }
        if(!isok&&n!=1) System.out.println("0");
        else if(n==1){

            if(du[0]==0 || du[0]==-1) System.out.println("1");
            else System.out.println("0");

        }
        else if(n==2){

            if(du[0]>=2 || du[1]>=2) System.out.println("0");
            else System.out.println("1");
        }
        else if(sum>n-2) System.out.println("0");
        else{

            BigInteger ans = new BigInteger("1");
            for(int i=n-2-sum+1;i<=n-2;i++){

                BigInteger tmp = BigInteger.valueOf(i);
                ans=ans.multiply(tmp);
            }
            for(int i=0;i<=tot;i++){

                for(int j=2;j<=fur[i];j++){

                    BigInteger tmp = BigInteger.valueOf(j);
                    ans=ans.divide(tmp);
                }
            }
            for(int i=sum+1;i<=n-2;i++) ans=ans.multiply(BigInteger.valueOf(q));
            System.out.println(ans);
        }
    }
}