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);
}
}
CF 294C(Java大数做计数)的更多相关文章
- java大数 斐波那契数列
java大数做斐波那契数列: 思路:1. 2.可以用数组存着 import java.math.BigInteger; import java.util.Scanner; public ...
- 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&记忆化递归
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...
- Java 大数、高精度模板
介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...
- java 大数计算
这几天做了几道用大数的题,发现java来做大数运算十分方便.对acmer来说是十分实用的 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger ...
- JAVA大数类
JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- 1873 初中的算术(java大数)
1873 初中的算术 1 秒 131,072 KB 10 分 2 级题 Noder现在上初三了,正在开始复习中考.他每天要计算型如 (a× a× a× ⋯× a) ...
- Java大数——快速矩阵幂
Java大数——快速矩阵幂 今天做了一道水题,尽管是水题,但是也没做出来.最后问了一下ChenJ大佬,才慢慢的改对,生无可恋了.... 题目描述: 给a,b,c三个数字,求a的b次幂对c取余. 数据范 ...
- java大数模板
java 大数计算 这几天做了几道用大数的题,发现java来做大数运算十分方便.对acmer来说是十分实用的 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3 ...
随机推荐
- Linux grep和find的区别
这是两个不同的命令,关于grep:Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- linux 配置apache+subversion
http://apr.apache.org/download.cgi http://subversion.tigris.org/servlets/ProjectDocumentList?folderI ...
- source insight添加汇编文件.s
(1) 做ARM嵌入式开发时,有时得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来,默认只加了.inc和.asm后缀的, ...
- C++const与指针
1.指向常量的指针变量 指向常量的指针变量的定义方法: const 类型标识符 *指针变量名: 如: const int *p; 这种方法定义的指针变量只可读取它所指向的变量或常量的值,不可借助该指 ...
- [OJ] Search for a Range
LintCode 61. Search for a Range (Medium) LeetCode 34. Search for a Range (Medium) class Solution { p ...
- 栈的实现(JAVA)
栈定义 栈(stack):是一种特殊的串行形式的数据结构,其特殊之处在于只允许在链接串行或者阵列的 一端进行插入.删除操作.其实现方式可以通过一维阵列和链接串行来实现. Tips:简单的来说栈其实也是 ...
- java学习之创建线程方法二
我们上一节当中讲到了创建线程的第一种方法,就是继承Thread类,覆写Thread当中的run方法,然后创建子类对象,之后调用对象的start方法启动线程.但是这种方法有一个缺陷,因为我们知道在jav ...
- C++ Prime:const的引用
可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用.与普通引用不同的是,对常量的引用不能被用作修改它所绑定的对象: ; const int &r1 = ci; ...
- USACO3.35A Game(记忆化)
刚开始理解有点误,想成每步都是最优的 ,结果卡在第六组数据上,, 无奈瞧了下别人的 发现自己理解错了,,我看的还是中文翻译.. 简单的记忆化 /* ID: shangca2 LANG: C++ TAS ...
- POJ_1742_Coins_(动态规划,多重部分和)
描述 http://poj.org/problem?id=1742 n种不同面额的硬币 ai ,每种各 mi 个,判断可以从这些数字值中选出若干使它们组成的面额恰好为 k 的 k 的个数. 原型: n ...