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 ...
随机推荐
- IIS6批量添加主机头,修改IIS数据库
首先,找到IIS的数据库.默认是在C:\WINDOWS\system32\inetsrv 下的MetaBase.xml文件. 如果找不到,请右键右键站点->所有服务->将配置保存到一个文件 ...
- C++设计模式-Bridge桥接模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...
- RSA加密算法总结
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进 ...
- reverse iterator
Problem 1: vector<int> coll = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; vector<int>::const_iterator ...
- cacti应用
cacti被很多IDC/CDN提供商用来进行带宽计算使用:带宽的95计费(95th Percentile charging) 95计费法是CDN常用计费方法: CDN基本上是每月结一次款.每5分钟取一 ...
- HTML特殊字符编码对照表
HTML特殊字符编码对照表 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η ...
- 冲刺一 (Day 2)
冲刺一 (Day 2) 小组讨论结果 经过今天的小组会议,小组各成员决定先进一步探讨项目的需求.因为我们明白要砍倒一棵树,磨刀才是前期的重中重之重,实际中也有不少以为前期需求没做好而,在项目后期推翻重 ...
- .NET (五)委托第五讲:内置委托Predicate
// 摘要: // 表示定义一组条件并确定指定对象是否符合这些条件的方法. // // 参数: // obj: // 要按照由此委托表示的方法中定义的条件进行比较的对象. // // 类型参数: // ...
- 3、C#面向对象:封装、继承、多态、String、集合、文件(下)
面向对象多态 一.装箱和拆箱 装箱:将值类型转换为引用类型.object o = 1:值类型给引用类型赋值 拆箱:将引用类型转换为值类型.int n = (int)o; 强制转换为值类型 满足条件:两 ...
- Java白皮书的关键术语
“白皮书”可以在http://www.oracle.com/technetwork/java/langenv-140151.html上找到. 1.简单性. 2.面向对象. 3.网络技能(Network ...