输入输出样例

输入样例#1:

1 2
3 3
输出样例#1:

1
输入样例#2:

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

0
7

说明

【样例1说明】

在所有可能的情况中,只有C_2^1 = 2C21​=2是2的倍数。

【子任务】


题目非常的长,但是意思很简单,就是求杨辉三角i行j列中能被k整除的数

因为组合数的意义其实就是杨辉三角(不懂得可以百度一下)好吧我接下来说一说

如图应该很明显了,但是对于OI来说的话可能放到左边用数组表示更加直观,顺便一提,最上方也可以加一个1,如图

求第i行第j列中被k整除的数的个数如下

我们可以先将杨辉三角打印出来,当然这里可以优化一下,将杨辉三角中能被k整除的数直接标为0

for(int i=;i<=;i++) c[i][]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
c[i][j]=(c[i-][j]+c[i-][j-])%k;
}

我们设f[i][j]为第i行第j列之前的数中能被f整除的数,则f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+(c[i][j]==0)(注意这里(c[i][j]==0)是个判断,为了好写就加上了)

那么我们注意到当i==j时,f[i][j-1]是空的,也就是少一个f[i][i]的值,所以要在j=i时加上一个f[i][i]

核心代码如下:

 for(int i=;i<=;i++)
{
for(int j=;j<=i;j++)
{
f[i][j]=f[i-][j]+f[i][j-]-f[i-][j-];
if(c[i][j]==)f[i][j]++;
}
f[i][i+]=f[i][i];//这里要到下一个i才会用到,所以在最后加
}

那么完整版的ak代码经过修改组合就出来了:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
int n,m,t,k,c[][],f[][];
int main()
{
cin>>t>>k;
for(int i=;i<=;i++) c[i][]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
c[i][j]=(c[i-][j]+c[i-][j-])%k;
}
for(int i=;i<=;i++)
{
for(int j=;j<=i;j++)
{
f[i][j]=f[i-][j]+f[i][j-]-f[i-][j-];
if(c[i][j]==)f[i][j]++;
}
f[i][i+]=f[i][i];
}
for(int i=;i<=t;i++)
{
cin>>n>>m;
if(m>n)m=n;
cout<<f[n][m]<<endl;;
}
return ;
}

特别鸣谢:hmr大佬,感谢大佬亲身讲解

大佬博客 https://www.cnblogs.com/hanruyun/

洛谷P2822 组合数问题的更多相关文章

  1. 洛谷P2822 组合数问题(题解)

    https://www.luogu.org/problemnew/show/P2822(题目传送) 先了解一下有关组合数的公式:(m在上,n在下) 组合数通项公式:C(n,m)=n!/[m!(n-m) ...

  2. 洛谷P2822组合数问题

    传送门啦 15分暴力,但看题解说暴力分有30分. 就是找到公式,然后套公式.. #include <iostream> #include <cstdio> #include & ...

  3. 洛谷 P2822 组合数问题

    题目描述 组合数C_n^mC​n​m​​表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的 ...

  4. 洛谷——P2822 组合数问题

    https://www.luogu.org/problem/show?pid=2822 题目描述 组合数C_n^mC​n​m​​表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三 ...

  5. 【洛谷P2822 组合数问题】

    题目连接 #include<iostream> #include<cstring> #include<cstdio> #include<cctype> ...

  6. 洛谷P2822 组合数问题 杨辉三角

    没想到这道题竟然这么水- 我们发现m,n都非常小,完全可以O(nm)O(nm)O(nm)预处理出stripe数组,即代表(i,j)(i,j)(i,j) 及其向上的一列的个数,然后进行递推即可. #in ...

  7. 洛谷 P2822 组合数问题 题解

    今天又考试了...... 这是T2. Analysis 考试时想了一个判断质因数个数+打表的神奇方法,但没在每次输入n,m时把ans置0,50分滚粗. 看了题解才发现原来是杨辉三角+二维前缀和,果然还 ...

  8. 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)

    洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...

  9. 【洛谷p2822】组合数问题

    (突然想          ??忘掉了wdt) (行吧那就%%%hmr) 组合数问题[传送门] (因为清明要出去培训数学知识所以一直在做数论) 组合数<=>杨辉三角形(从wz那拐来的技能 ...

随机推荐

  1. A2D Framework - 看如何精简业务逻辑 - 缓存子系统

    A2D中一项功能是关于Cache的,能够将判断.获取.删除cache的代码缩减到最少量,如下是Order业务逻辑的demo示范: interface IOrder { [Cachable()] str ...

  2. ML.NET 示例:深度学习之集成TensorFlow

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  3. SkyWalking Liunx 环境搭建&NetCore接入

    背景 前两天看见有小哥介绍windows下安装skywalking的介绍地址在这. 正好最近也在搭建linux环境的SkyWalking,顺便把linux环境搭建的经验分享下,帮助下使用linux部署 ...

  4. MiniProfiler安装使用心得

    MiniProfiler简介: MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC的性能分析的小程序.可以对一个页面本身,及该页面通过直接引用.Aja ...

  5. ORM简介 单表添加修改删除表记录

    ---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...

  6. transfer.sh:通过命令行简单的创建文件分享

    简介 通过一个命令,就可以在终端上,将文件加密传输到远程服务器,提供对外文件共享的功能. transfer.sh这是一个我常用的.可以在终端上使用的文件共享服务,可以在某些方面替代sz或者scp命令. ...

  7. 最全的Django入门及常用配置

    Django 常用配置 Django 安装 pipx install django x 为python解释器版本2 or 3 如果你想安装指定版本的django,使用pip install djang ...

  8. Pair Project

    以前只是一个人完成一个项目,不论什么都是,现在突然要两个人一起来写, 听上去挺稀奇的,也挺简单的,可惜了就是“听上去”而已.我认为这也是一种技术啊~ 我跟我的搭档研究了好久好久,选择了好久,然后也选了 ...

  9. asp.net core发布到linux

    在发布到linux的过程中出现两个问题现在总结一下: 我的虚拟机是安装到本机上面的,所以,应该在虚拟机的设置里面设置端口映射.具体设置如下: 选择vm上方的编辑 在弹出的框中选择VMnet8,点击下方 ...

  10. MySQL dump文件导入

    1 打开cmd 输入要导入的数据库,用户名,密码,dump文件路径 mysql -u employees <E:\employees_db\load_departments.dump