题目描述

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

其中n! = 1 × 2 × · · · × n

小葱想知道如果给定n,m和k,对于所有的0 <= i <= n,0 <= j <= min(i,m)有多少对 (i,j)满足是k的倍数。

输入输出格式

输入格式:

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

接下来t行每行两个整数n,m,其中n,m的意义见【问题描述】。

输出格式:

t行,每行一个整数代表答案。

输入输出样例

输入样例#1:

1 2
3 3
输出样例#1:

1
输入样例#2:

2 5
4 5
6 7
输出样例#2:

0
7

说明

【样例1说明】

在所有可能的情况中,只有是2的倍数。

【子任务】

思路:

  该题需要使用到组合数的递推式

    C[i][j]=(C[i-1][j]%k+C[i-1][j-1]%k)%k(需要在预处理的时候随手取模)

  解释:n个物品中取m个物品,若不取a这个物品,则从n-1个物体中选m个;

    若取a这个物品则从n-1中选m-1个。

    详见高中数学课本选修2—3

  然后我们做完上述预处理之后,从头到尾扫一遍C数组是否为0即可知道是否为k的倍数。

  按要求输出即可,这题就到此结束啦!

  但是。。这样就真的over了吗?!

  没有!

  其实是只有90分的。。。。

  什么?为何不满分?

  大概是扫C数组太花时间了吧。。。。所以我们还需要一些优化!

  我们预处理了C数组,那么是否还可以预处理一下k的倍数的个数?

  答案是肯定的!

  令s[i][j]表示在所有的C(i,j) (1≤j≤i)的里面,为k的倍数的有多少个,所以得到处理数组的时候就是p[i][j] = p[i][j-1] ,然后使每找到一个C[i][j]为0就让p[i][j]的值+1。

  最后只需要从1-n循环一遍令ans+=p[i][j],最后输出ans即可(注意这里的0 <= j <= min(i,m)!)

  好啦!这样就ok啦!

上代码:

#include <iostream>
#include <cstdio>
using namespace std; const int N = ;
const int M = ;
int T,k,n,m,ans;
int C[N][M],p[N][M]; void pre() {
for(int i=; i<N; ++i) {
C[i][]=C[i][i]=;
for(int j=; j<i; ++j)
C[i][j]=(C[i-][j]%k+C[i-][j-]%k)%k;
}
for(int i=; i<N; ++i)
for(int j=; j<=i; ++j) {
p[i][j]=p[i][j-];
if(C[i][j]==)
p[i][j]++;
}
} int main() {
scanf("%d%d",&T,&k);
pre();
while(T--) {
scanf("%d%d",&n,&m);
for(int i=,j; i<=n; ++i) {
j=min(i,m);
ans+=p[i][j];
}
printf("%d\n",ans);
ans=;
}
return ;
}

Noip2016 提高组 Day2 T1 组合数问题的更多相关文章

  1. NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中 ...

  2. 【NOIP2016提高组day2】蚯蚓

    那么我们开三个不上升队列, 第一个记录原来的蚯蚓, 第二个记录乘以p的蚯蚓 第三个记录乘以(1-p)的蚯蚓, 在记录每条就要入队列的时间,就可以求出增加的长度 每次比较三个队列的队首,取最大的值x的切 ...

  3. 【暴力】洛谷 P2038 NOIP2014提高组 day2 T1 无线网络发射器选址

    暴力枚举. #include<cstdio> #include<algorithm> using namespace std; ][],d,n,x,y,z,num,ans=-; ...

  4. Noip2013 提高组 Day2 T1 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  5. 【NOIP2016提高组day2】愤怒的小鸟

    分析 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0, 0) 处,每次Kiana可以用它向第一象限发射一只红色的小鸟, 小鸟们的飞行轨迹均 ...

  6. 18/9/16牛客网提高组Day2

    牛客网提高组Day2 T1 方差 第一眼看就知道要打暴力啊,然而并没有想到去化简式子... 可能因为昨晚没睡好,今天上午困死 导致暴力打了一个半小时,还不对... #include <algor ...

  7. Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数

    Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ...

  8. 【题解】NOIP2016提高组 复赛

    [题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...

  9. 【题解】NOIP2016 提高组 简要题解

    [题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...

随机推荐

  1. Spring、SpringMVC版本及配置

    一.Spring版本 Spring的最新版本是Spring 5.x,Spring 4.x的最后版本是Spring 4.3.x,会维护到2020年(Spring的GitHub主页对此有说明). 二.Sp ...

  2. KeyValuePair<string, string>

    ; #region CUP Method /// <summary> /// 请求与响应的超时时间 /// </summary> static public int Timeo ...

  3. hdu 2609 字符串最小表示法 虽然不是很懂 还是先贴上来吧。/,。/

    还需要再消化一下这个算法.. 今天没有时间了,, 六级过了 就有大把时间 快活啊!#include<iostream> #include<cstdio> #include< ...

  4. Angular6如何引入jQuery-knob

    Angular6如何引入jQuery-knob 1.概述 Angular6引入jQuery变得异常简单,请参考https://blog.csdn.net/qq_35321405/article/det ...

  5. SQL Prompt 注册后隔一段时间莫名无法使用的处理

    https://blog.csdn.net/anyqu/article/details/88537197 以前一直以为是授权丢了,反复重装也解决不了 Sql Prompt---Unable to co ...

  6. php 测试php连接redis集群的案例

    <?php$redis_list = ['12.24.18.2:6379'];$client = new RedisCluster(NUll,$redis_list);echo $client- ...

  7. Java Web-servlet、HTTP in servlet和捎带的Java绘图学习

    Java Web-servlet.HTTP in servlet和捎带的Java绘图学习 server applet:运行在服务器端的小程序 动态项目的动态内容的java类依赖于服务器才能运行,由to ...

  8. 手工实现HttpBasic校验

      HttpBasic: 是RFC中定义的一种控制HTTP协议访问资源的方式.具体当HTTP请求受限资源时,就需要在请求头中添加以"Authorization"为key的heade ...

  9. Python-memcached的使用用法

    Memcached API set(key,val,time=0,min_compress_len=0) 无条件键值对的设置,其中的time用于设置超时,单位是秒,而min_compress_len则 ...

  10. 第一章、前端之html

    目录 第一章.前端之html 一. html介绍 第一章.前端之html 一. html介绍 web服务本质 import socket sk = socket.socket() sk.bind((& ...