Acwing.886 求组合数Ⅱ

题目

给定n组询问,每组询问给定两个整数a, b,请你输出

的值。

输入格式

第一行包含整数n。

接下来n行,每行包含---组a和b。

输出格式

共n行,每行输出---个询问的解。

数据范围

1<n≤10000,

1 <b<a≤105

  • 输入样例:
cpp 复制代码
3
3 1
5 3
2 2
  • 输出样例:
cpp 复制代码
3
10
1

题解

cpp 复制代码
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long LL;
const int N = 100010,mod = 1e9 + 7;

int fact[N], infact[N];

int qmi(int a, int k, int p)
{
	int res = 1;
	while (k)
	{
		if (k & 1) res = (LL)res * a % p;
		a = (LL)a * a % p;
		k >>= 1;
	}	
	return res;
}	
int main()
{
	fact[0] = infact[0]= 1;
	for ( int i = 1; i <N; i ++ )
	{
		fact[i] = (LL)fact[i - 1]* i % mod;
		infact[i] = (LL)infact[i - 1] * qmi(i,mod - 2, mod) % mod;
	}
I
	int n;
	scanf("%d"", &n);
	while (n -- )
	{
		int a, b;
		scanf(""%d%d"",&a,&b);
		printf("%d\n",(LL)fact[a] * infact[b] % mod * infact[a - b] % mod) ;
	}	
	return 0;
}	

思路

组合数1用的思想是递推,但是在数据量大的时候超时,我们需要进行预处理,根据下图数学知识

我们提前算出阶乘数组,最后带入公式求得答案。

相关推荐
shehuiyuelaiyuehao5 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
203号居民7 小时前
LeetCode hot 100 — 141. 环形链表2
算法·leetcode·链表
玖玥拾7 小时前
LeetCode 202 快乐数
算法·leetcode
LuminousCPP7 小时前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
ZhouDevin8 小时前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
Tim_109 小时前
【LeetCode】29、两数相除
算法·leetcode·职场和发展
船厂电气自动化ai大模型9 小时前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
余额瞒着我当琳10 小时前
算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
算法
你压到我腿毛了66610 小时前
C语言冒泡算法(Bubble sort)
c语言·数据结构·算法
靠沿11 小时前
贪心算法专题(三)
算法·贪心算法