UVa 10458 - Cricket Ranking (容斥)

原创 2015年07月10日 21:10:28

题意

让几个区间内的数的和为K,问方法数。

思路

组合数学P169。

代码

import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

    static BigInteger C(long n, long m) {
        if (n < m) return BigInteger.ZERO;
        m = Math.min(m, n-m);
        BigInteger cur_ans = BigInteger.ONE;
        for (int i = 0; i < m; i++) cur_ans = cur_ans.multiply(BigInteger.valueOf(n-i)).divide(BigInteger.valueOf(i+1));
        return cur_ans;
    }

    static int[] x, y;
    static int n, m;

    static void Solve() {
        BigInteger ans = BigInteger.ZERO;
        BigInteger add = BigInteger.ZERO, del = BigInteger.ZERO;
        for (int i = 0; i < (1<<n); i++) {
            long cnt = 0, cur_m = m;
            for (int j = 0; j < n; j++) {
                if (((1<<j)&i) != 0) {
                    cnt++;
                    cur_m -= y[j]+1;
                }
            }
            if (cur_m < 0) continue;
            if (cnt%2 == 0) add = add.add(C(cur_m+n-1, cur_m));
            else del = del.add(C(cur_m+n-1, cur_m));
        }
        System.out.println(add.subtract(del));
    }

    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            x = new int[100]; y = new int[100];
            n = in.nextInt(); m = in.nextInt();
            for (int i = 0; i < n; i++) {
                x[i] = in.nextInt();
                m -= x[i];
                y[i] = in.nextInt();
                y[i] -= x[i];
            }
            if (m < 0) System.out.println(0);
            else if (m == 0) System.out.println(1);
            else Solve();
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许可以随便转载,写你自己的名字都没关系(๑•̀ㅂ•́)و✧

相关文章推荐

[容斥+lucas] LightOJ 1124 - Cricket Ranking

LightOJ 1124 - Cricket Ranking 题意:有k个区间[l, r],从每个区间里取一个整数,问k个数和为n的方法数。 题解:显然的,题目可以转化成从k个区间[0, r[...
  • kg20006
  • kg20006
  • 2016年03月26日 19:11
  • 364

UVa 1312 Cricket Field【暴力】

题目大意 样例 input output 解释 思路 代码 Hit题目大意传送门一个w*h(1

uva 1312——Cricket Field

题意:在w*h的方格内,找出一个最大的正方形,使得正方形内没有点(可以在边界有点)。 思路:枚举。正方形可以看作是矩形,只不过在取的时候取最短的那条边作为边长,那么枚举出短边最大的矩形即可。...
  • bobodem
  • bobodem
  • 2015年11月07日 21:02
  • 143

Cricket Field ——极大子矩行(坏点少)

Input file: cricket.in Output file: cricket.out Description Once upon a time there was a ...

Cricket系统定位程序

  • 2008年02月27日 15:59
  • 310KB
  • 下载

UVa 11806 Cheerleaders (组合&逆向思维||容斥定理)

【题意】 在一个n*m的区域内放k个棋子,第一排,最后一排,第一列,最后一列一定要放,求一共有多少种方法。 【思路】 正着想重复的情况太多,不妨反着思考。 设ai表示有且仅有i条边上没有放的情况数,...

UVA 10325 (容斥原理)

题意:就是给定一个数 n,m,还有m个数a[i],然后让你求的就是在 1- n中 没有被这m个数整除的个数... 分析:本题可以转换成求解能被整除的个数,小于n能被2整除的个数为n/2,这样我们就可...

UVa 11481 Arrange the Numbers (组合数学+容斥原理)

UVa 11481 Arrange the Numbers题目大意:可以将序列1,2,3,...n1,2,3,...n任意重排,但重排后的前mm(m≤nm\leq n)个位置恰好有kk(k≤mk\le...

uva 10617 Again Palindrome(dp,容斥原理,求字符串内回文子序列的个数)

dp[i][j]表示s[i]到s[j]这一字串内回文串的个数

UVA 11806 Cheerleaders(容斥原理 + 组合数)

传送门 In most professional sporting events, cheerleaders play a major role in entertaining the specta...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 10458 - Cricket Ranking (容斥)
举报原因:
原因补充:

(最多只允许输入30个字)