题目描述

组合数C(n,m)表示的是从n个物品中选出m个物品的方案数。举个例子,从(1, 2, 3)三个物品中选择两个物品可以有(1, 2),(1, 3),(2, 3)这三种选择方法。根据组合数的定义,我们可以给出计算组合数C(n,m)的一般公式:
C(n,m)=n!/(m!(n-m)!)
其中n!= 1×2×···×n
小葱想知道如果给定n,mk,对于所有的0≤in,0≤j≤min(i,m)有多少对
i

(i,j)满足C(i,j)是k的倍数。

输入

第一行有两个整数t,k,其中t代表该测试点总共有多少组测试数据,k的意义见【问题描述】。
接下来t行每行两个整数n,m,其中n,m的意义见【问题描述】。

输出

t行,每行一个整数代表所有的0≤in,0≤j≤min(i,m)中有多少对(i,j)满足C(i,j)是k的倍数。

样例输入

1 2 3 3 2 5 4 5 6 7

样例输出

1 0 7

提示

【样例 1 说明】
在所有可能的情况中,只有C(2,1)=2 是2的倍数。
 
 
 

测试点

n

m

k

t

1

≤3

≤3

=2

=1

2

=3

≤104

3

≤7

≤7

=4

=1

4

=5

≤104

5

≤10

≤10

=6

=1

6

=7

≤104

7

≤20

≤100

=8

=1

8

=9

≤104

9

≤25

≤2000

=10

=1

10

=11

≤104

11

≤60

≤20

=12

=1

12

=13

≤104

13

 
≤100

≤25

=14

=1

14

=15

≤104

15

≤60

=16

=1

16

=17

≤104

17

 
≤2000

≤100

=18

=1

18

=19

≤104

19

≤2000

=20

=1

20

=21

≤104
 

题解

这道题刚看到以为要分解质因数,后来想到用C(i,j)=C(i-1,j-1)+C(i-1,j)就可以了
用c[i][j]表示C(i,j)%k的值,再用s[i][j]表示第i行c[i][j]的前缀和,再判断当前的c[i][j]是否等于0,如果c[i][j]等于0那么s[i][j]++
每次输入的时候把前i个s[i][min(i,m)]加起来就可以了
因为n<=2000,t<=10000,所以枚举一遍i不会超
总的来说应该比较好理解的
#include<bits/stdc++.h>
#define N 2005
using namespace std;
int T,k,n,m,ans;
int c[N][N],s[N][N];
int main(){
scanf("%d%d",&T,&k);
c[][]=;
for (int i=;i<=N-;i++){
c[i][]=;
for (int j=;j<=i;j++)
c[i][j]=(c[i-][j-]+c[i-][j])%k;
}
for (int i=;i<=N-;i++){
if (!c[i][]) s[i][]++;
for (int j=;j<=i;j++){
s[i][j]=s[i][j-];
if (!c[i][j]) s[i][j]++;
}
}
while (T--){
ans=;
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
ans=ans+s[i][min(i,m)];
printf("%d\n",ans);
}
return ;
}
 

YYHS-NOIP2017SummerTraining0914-问题 A: 组合数问题的更多相关文章

  1. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  2. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  3. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  4. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  5. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  6. AC日记——组合数问题 落谷 P2822 noip2016day2T1

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  7. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  8. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

  9. UOJ263 【NOIP2016】组合数问题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  10. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

随机推荐

  1. 分布式事务,EventBus 解决方案:CAP【中文文档】

    前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下这篇文章. 本文档为 CAP 文献(Wiki),本文献同 ...

  2. Android 原生 Intent 分享支持的那些事

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 对于一个 App ...

  3. SpringBoot填坑系列---XML方式配置数据库

    本次只是简单的运用SpringBoot搭建框架,对其原理并不做深入的探究 1.POM文件 <?xml version="1.0" encoding="UTF-8&q ...

  4. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

  5. Spring中各jar包的作用

    Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects:Spring提供的对AspectJ框架的整合 Spring Beans:Spring ...

  6. Java框架概述

    一.框架的意义 1.什么是框架? 框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现.有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑. ...

  7. 【NO.6】HTTP请求-配置-POST请求-GET请求

    直接举例来说 :) 例1:URL里面有”&”连接的情况 http://123.456.7.89:8080/aa/bb/cc/?userid=abcd@gmail.com&operati ...

  8. Java入门——(6)集合

       关键词:Collection接口.Map接口.Iterator接口.泛型.Collections工具类.Arrays工具类   一.集合概述      当数据多了需要存储,需要容器,而数据的个数 ...

  9. 【LeetCode】数组-6(561)-Array Partition I(比较抽象的题目)

    题目描述:两句话发人深思啊.... Given an array of 2n integers, your task is to group these integers into n pairs o ...

  10. Bresenham画椭圆算法

    这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入椭圆的长半轴a和短半轴b. (2) 计算初始值 ...