洛谷P2822 组合数问题
输入输出样例
1 2
3 3
1
2 5
4 5
6 7
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 组合数问题的更多相关文章
- 洛谷P2822 组合数问题(题解)
		
https://www.luogu.org/problemnew/show/P2822(题目传送) 先了解一下有关组合数的公式:(m在上,n在下) 组合数通项公式:C(n,m)=n!/[m!(n-m) ...
 - 洛谷P2822组合数问题
		
传送门啦 15分暴力,但看题解说暴力分有30分. 就是找到公式,然后套公式.. #include <iostream> #include <cstdio> #include & ...
 - 洛谷 P2822 组合数问题
		
题目描述 组合数C_n^mCnm表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的 ...
 - 洛谷——P2822 组合数问题
		
https://www.luogu.org/problem/show?pid=2822 题目描述 组合数C_n^mCnm表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三 ...
 - 【洛谷P2822 组合数问题】
		
题目连接 #include<iostream> #include<cstring> #include<cstdio> #include<cctype> ...
 - 洛谷P2822 组合数问题 杨辉三角
		
没想到这道题竟然这么水- 我们发现m,n都非常小,完全可以O(nm)O(nm)O(nm)预处理出stripe数组,即代表(i,j)(i,j)(i,j) 及其向上的一列的个数,然后进行递推即可. #in ...
 - 洛谷 P2822 组合数问题 题解
		
今天又考试了...... 这是T2. Analysis 考试时想了一个判断质因数个数+打表的神奇方法,但没在每次输入n,m时把ans置0,50分滚粗. 看了题解才发现原来是杨辉三角+二维前缀和,果然还 ...
 - 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)
		
洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...
 - 【洛谷p2822】组合数问题
		
(突然想 ??忘掉了wdt) (行吧那就%%%hmr) 组合数问题[传送门] (因为清明要出去培训数学知识所以一直在做数论) 组合数<=>杨辉三角形(从wz那拐来的技能 ...
 
随机推荐
- Mysql绿色版安装和遇到的问题
			
MySQL绿色版安装整套流程,http://www.cnblogs.com/LiuChunfu/p/6426918.html,按这个教程装完后,用cmd命令窗口也能登陆.但是用mysql-font登不 ...
 - Python Revisited Day 04 (控制结构与函数)
			
目录 4.1 控制结构 4.1.1 条件分支 4.1.2 循环 4.2 异常处理 4.2.1 捕获与产生异常 4.2.2 自定义异常 4.3 自定义函数 Tips 参数默认值为可变时 危险 4.3.1 ...
 - vue组件化开发组件拆分原则是什么
			
原则:可复用.可组合: 两大类:页面组件.功能组件: 除了公共头导航.侧导航.脚部内容,还有:
 - 15-分析Ajax请求并抓取今日头条街拍美图
			
流程框架: 抓取索引页内容:利用requests请求目标站点,得到索引网页HTML代码,返回结果. 抓取详情页内容:解析返回结果,得到详情页的链接,并进一步抓取详情页的信息. 下载图片与保存数据库:将 ...
 - session与cookie的区别以及HTML5中WebStorage理解
			
一.session与cookie的区别 二.HTML5中WebStorage理解 WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回 ...
 - nginx学习笔记二
			
一,nginx架构在Linux系统中以daemon(守护进程)的方式在后台运行,后台进程包含一个master进程和多个worker进程(多进程的工作方式) master进程 | 信号 | | ---- ...
 - 解决scrapy报错:ModuleNotFoundError: No module named 'win32api'
			
ModuleNotFoundError: No module named 'win32api' 表示win32api未安装 解决办法: 下载对应python版本的win32api,并安装. 下载地址: ...
 - HTTPS的SSL证书配置
			
SSL证书 TOMCAT7.0部署_百度经验https://jingyan.baidu.com/article/7082dc1c65066be40a89bda8.html SSL证书安装指引 - 青春 ...
 - Python3练习题 006 冒泡排序
			
import random a = [random.randint(1,100) for i in range(10)]def bu(target): length = len(target) whi ...
 - 百度地图api在Html中显示,在jsp页面中不显示解决方法
			
在jsp页面中显示如下 但是在html中正常显示. 原来的代码如下: <script type="text/javascript" src="http://api. ...
 
			
		