ZOJ 1442 Dinner Is Ready 容斥原理 + java大数
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=442
求解
x1 + x2 + x3 + .... + xn = m
其中xi属于[L, R]
不同解的个数。
这题需要用大数,要注意。
原理和以前做的一样。容斥。先算出每个xi大于等于Li的解的个数。关于这个,怎么解,看看:
http://www.cnblogs.com/liuweimingcprogram/p/6091396.html
然后容斥吧,枚举有一个数破坏条件,就是大于R的,减掉,两个,加回来。
由于每个R都不同,所以只能暴力dfs。也就是2^n的复杂度。
所以复杂度需要2^n * 常数。
推荐几个题吧。
http://www.cnblogs.com/liuweimingcprogram/p/6134521.html
http://www.cnblogs.com/liuweimingcprogram/p/6135008.html
一样的容斥思路的。
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/ /**
*
* @author Liu
*/
import java.util.*;
import java.math.*; //大数头文件
public class Main {
static final int maxn = 15;
static int[] be = new int[maxn];
static int[] en = new int[maxn];
static int n, m;
static BigInteger ans;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int t = input.nextInt();
while ((t--) > 0) { //返回值必须bool
n = input.nextInt();
m = input.nextInt();
int sum = 0;
for (int i = 1; i <= n; ++i) {
be[i] = input.nextInt();
en[i] = input.nextInt();
sum += be[i];
}
ans = BigInteger.ZERO; //清0
dfs(1, sum, 0);
System.out.println(ans);
}
}
public static BigInteger C(int n, int m) { //这个数字很大
if (n < m) return BigInteger.ZERO;
if (n == m) return BigInteger.ONE;
BigInteger ans = BigInteger.ONE;
int mx = Math.max(n - m, m); //调用最大值
int mi = n - mx;
for (int i = 1; i <= mi; ++i) {
ans = ans.multiply(BigInteger.valueOf(mx + i)); //转换成大数的方法
ans = ans.divide(BigInteger.valueOf(i)); //记得接收返回值
}
return ans;
}
public static void dfs(int cur, int tot, int has) {
if (cur == n + 1) {
if (has % 2 == 1) {
ans = ans.subtract(C(m - tot + n - 1, n - 1));
} else ans = ans.add(C(m - tot + n - 1, n - 1));
return;
}
dfs(cur + 1, tot - be[cur] + en[cur] + 1, has + 1);
dfs(cur + 1, tot, has);
}
}
ZOJ 1442 Dinner Is Ready 容斥原理 + java大数的更多相关文章
- java大数
java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: S ...
- JAVA大数运算
java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...
- java大数总结【转】
java大数(2013长春网络赛)--hdu4762总结一下:1.java提交类要写Main.2.读取大数. Scanner read=new Scanner(System.in); BigInteg ...
- HDU5047Sawtooth(java大数)
HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是 ...
- JAVA大数类
JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...
- HDU4762(JAVA大数)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- ZOJ3477&JAVA大数类
转:http://blog.csdn.net/sunkun2013/article/details/11822927 import java.util.*; import java.math.BigI ...
- 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&记忆化递归
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
随机推荐
- Linux Mint安装jdk8
想到研究Java,可能学习openjdk是比较好的方式,于是去找openjdk.对于Debian based系统的安装指南是: -jdk 然而我的Linux Mint 17却无法安装.搜索之后发现如下 ...
- UEFI+GPT引导实践篇(二):UEFI引导安装64位Win7/Win8
下文是在联想Y480笔记本上以UEFI方式启动安装Windows8的全过程,安装Windows7过程基本相同.注意,如果你的电脑硬盘是MBR分区结构,安装过程中将要删除硬盘上所有数据,请安装前备份硬盘 ...
- tiny中文乱码问题,不过仅适用于windows,所以xml不可以出现中文
我是在SetAttribute() 函数之前使用的 SetAttribute(const char* name,const char * _value) 首先得到了一个CString 类型的变量 st ...
- VS中附加进程的方式调试IIS页面,以及设置断点无效问题解决
以前调试网站的时候都习惯是直接在解决方案中右键调试——启动新实例,后来发现这样的缺点有: 1.启动比较慢: 2.一些浏览器的request参数无法带入: 3.不特殊指定启动url的话,VS会将页面加载 ...
- hadoop 日志分析
1:在每一个tomcat服务器上,生成的日志目录中,在java中用定时器每天将当天的日志上传到hadoop中 (技术要点:quatz+hadoop-client)具体的目录动态的采用时间品名 2:ha ...
- 2015.05.14:codesmith
安装: 安装好codesmith会有两个软件:一个编译器(CodeSmith Generator Explorer),一个生成工具(CodeSmith Generator Studio) 破解: 一般 ...
- Thinkphp源码分析系列(七)–控制器基类
在mvc模式中,c代表的就是控制器,是是应用程序中处理用户交互的部分.通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据.控制器是沟通视图和模型的桥梁,他接受用户请求,并调用模型层去处理用户 ...
- linux ssh publickey登录
一.公钥认证的基本思想: 对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其中,public key存放在目标服务器上,而private key为特 ...
- iOS平台使用陀螺仪传感器
在移动端开发过程中,有时候会用到陀螺仪传感器获取当前手机的姿态,下面给出iOS端如何获取陀螺仪姿态数据的代码: //根据陀螺仪的四元数转换为矩阵 + (GLKMatrix4)calculateMatr ...
- leetcode 205
205. Isomorphic Strings Given two strings s and t, determine if they are isomorphic. Two strings are ...