zoukankan      html  css  js  c++  java
  • CF 294C(Java大数做计数)

    题目链接:http://codeforces.com/contest/294/problem/C

    代码:

    import java.util.*;
    import java.math.*;
    
    public class Main {
        public static void main(String[] args){
            Scanner cin = new Scanner(System.in);
            BigInteger[] fir;
            fir = new BigInteger[1050];
            fir[0] = fir[0].ONE;
            for(int i=1; i<=1000; i++)
                fir[i] = fir[i-1].multiply(BigInteger.valueOf(i));
            BigInteger[] sec;
            sec = new BigInteger[1050];
            sec[0] = sec[0].ONE;
            for(int i=1; i<=1000; i++)
                sec[i] = sec[i-1].multiply(BigInteger.valueOf(2));
            
            int n,m;
            boolean flag[];
            flag = new boolean[1050];
            for(int i=0; i<=1000; i++) 
                flag[i] = false;
              
            n = cin.nextInt();
            m = cin.nextInt();   
            
            int last = 0;
            int sta[];
            sta = new int[1050];
            int cnt = 0;
            
            for(int i=1; i<=m; i++)
            {
                int temp;
                temp = cin.nextInt();
                flag[temp] = true;
            }
            
            for(int i=1; i<=n; i++)
            {
                if(flag[i])
                {    
                    if(i-1-last > 0)
                    {
                        sta[cnt++] = i - 1 - last;
                    }
                    last = i;
                }
                if(i == n && flag[i] == false)
                {
                    if(i-last > 0)
                    {
                        sta[cnt++] = i- last;
                    }
                }
            }
            BigInteger ans;
            ans = fir[n-m]; 
    
            for(int i=0; i<cnt; i++)
            {
                int k = sta[i];
                ans = ans.divide(fir[k]);
                if((i == 0 && !flag[1])||(i == cnt-1 && !flag[n]))
                    continue;
                
                ans = ans.multiply(sec[k-1]); 
            }
            
            ans = ans.mod(BigInteger.valueOf(1000000007));
            System.out.println(ans);
        }
    }
    View Code
  • 相关阅读:
    luogu P1415 拆分数列 序列DP
    [HAOI2015]树上操作
    [SHOI2012]魔法树
    [SCOI2010]连续攻击游戏
    [NOI2016]区间
    简单数论(一)
    iermu爱耳目
    李宇春:会跳舞的文艺青年
    文峰塔很安祥
    技术宅之flappy bird 二逼鸟
  • 原文地址:https://www.cnblogs.com/acmdeweilai/p/3402222.html
Copyright © 2011-2022 走看看