求组合数专题

news2024/9/30 18:47:22

求组合数 Ⅰ(递推公式)

 

思路 O(a\cdot b)

  • 递推法预处理
    • 利用公式 C_{a}^{b} = C_{a-1}^{b-1} + C_{a-1}^{b}
    • 复杂度 O(a \cdot b) = 4*10^{6}
  • 直接查询
    • 单次查询复杂度 O(1)

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
const int mod = 1e9+7;
int c[N][N];
int get_c(int a, int b)
{
    c[0][0] = 1;
    for(int i = 1; i <= a; i++)
    {
        c[i][0] = 1;
        for(int j = 1; j <= a; j++)
        {
            c[i][j] = (c[i-1][j-1] + c[i-1][j]) % mod;
        }
    }
    
    return c[a][b];
}
int main()
{
    get_c(2000, 2000);
    
    int n;
    cin >> n;
    while (n -- ){
        int a, b;
        cin >> a >> b;
        cout << c[a][b] << '\n';
    }
}

求组合数 Ⅱ (乘法逆元、费马小定理、快速幂)

思路 O(1e5 \cdot log(p-2) + n)

  • 很明显,递推法预处理会超时。于是我们选择另一种计算组合数的方式:快速幂(处理分子的阶乘、分母的阶乘) + 费马小定理(将除以分母,在模运算中该换为,乘以分母的乘法逆元)
    • 步骤       
      • 计算阶乘 O(b_{max}) = 10^{5}
      • 快速幂求乘法逆元 O(log(p-2)) ,p = 1e9+7
    • 总复杂度 O(n \cdot (b_{max} + log(p-2))) > 10^{9}
    • 反思:不同的数据计算阶乘时重复计算了
    • 改进:预处理所有阶乘 1e5
      • (同时可以预处理所有阶乘的乘法逆元)O(1e5 * log(p-2))
    • 注意:求 \frac{a!}{(a-b)!} 时 仍不能用除法,要采用乘法逆元

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
const int mod = 1e9+7;
typedef long long ll;
ll fac[N], ifac[N];
ll qmi(ll base, ll expo)
{
    ll retv = 1;
    while(expo)
    {
        if(expo & 1) retv = retv * base % mod;
        base = base * base % mod;
        expo >>= 1;
    }
    
    return retv;
}
void init()
{
    fac[0] = ifac[0] = 1;
    for(ll i = 1; i <= 100000; i++)
    {
        fac[i] = fac[i-1] * i % mod;
        ifac[i] = qmi(i, mod-2) * ifac[i-1] % mod;
    }
}
int main()
{
    init();
    
    int n;
    cin >> n;
    while (n -- ){
        int a, b;
        cin >> a >> b;
        
        cout << fac[a] * ifac[a-b] % mod * ifac[b] % mod << '\n';
    }
}

求组合数 Ⅲ

求组合数 Ⅳ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决VRM格式模型在Unity中运行出现头发乱飞等问题

1、问题 通过VRoidStudio制作导出的vrm格式的模型&#xff0c;放在unity中使用时&#xff0c;一运行就会出现头发乱飞&#xff0c;没有自然下垂的问题 2、解决方法 将模型下的secondary中的所有VRM Spring Bone脚本中的Drag Force改为1&#xff0c;Hit Radius改为0 修改后…

SpringBoot+Thymeleaf发票系统

> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录&#xff0c;权限控制&#xff0c;客户管理&#xff0c;发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…

LeetCode[中等] 24.两两交换链表中的结点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 思路&#xff1a;递归 头结点head&#xff0c;第二个结点head.next, 交换结点…

【论文阅读】MEDICAL GRAPH RAG: TOWARDS SAFE MEDICAL LARGE LANGUAGE MODEL VIA

论文地址&#xff1a;https://arxiv.org/abs/2408.04187#:~:textWe%20introduce%20a%20novel%20graph-based%20Retrieval-Augmented 代码地址&#xff1a; GitHub - MedicineToken/Medical-Graph-RAG: Medical Graph RAG: Graph RAG for the Medical Data 1 研究背景&#xff1…

LARA:多语言多轮对话意图分类的新突破

人工智能咨询培训老师叶梓 转载标明出处 多轮对话意图分类面临的主要挑战在于对话的复杂性和上下文的不断变化。如图 1 所示。在多轮对话中&#xff0c;意图可能随着对话的进展而变化&#xff0c;这就需要注释者不仅要理解每条消息的内容&#xff0c;还要把握整个对话的上下文…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…

Android开发国家手机号归属地列表

Android开发国家手机号归属地列表 国家手机号归属地列表需求不多&#xff0c;但是还是有一些 一、思路&#xff1a; 本地的国家归属号json 二、效果图&#xff1a; 三、关键代码&#xff1a; // 联系&#xff1a;893151960 public class ChooseCountryActivity extends Ap…

golang 获取证书的生效及过期时间

测试样例 func TestGetCertVaildTime(t *testing.T) {certPEM, err : ioutil.ReadFile("aa.bbb.com.crt")if err ! nil {fmt.Println("读取证书文件出错:", err)return}// 解码PEM格式的证书block, _ : pem.Decode(certPEM)if block nil {fmt.Println(&q…

Deep Tone Mapping Operator for High DynamicRange Images

Abstract 计算快速的色调映射算子 (TMO) 可以快速适应各种高动态范围 (HDR) 内容&#xff0c;对于在电影屏幕或标准显示器等各种低动态范围 (LDR) 输出设备上进行可视化至关重要。 现有的 TMO 只能成功地对有限数量的 HDR 内容进行色调映射&#xff0c;并且需要进行广泛的参数…

Mac通过ssh连接工具远程登录服务器( Royal TSX安装及使用)

一、Royal TSX软件下载地址 Royal Apps 二、Royal TSX 汉化 汉化包地址&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 三、基础配置 Royal TSX 是一款基于插件的应用&#xff0c;刚安装时还不具备使用条件&#xff0c;需要进行一些基础配置 1 安装基础插件…

银行CRM系统的核心功能解析与应用价值

在当今竞争激烈的金融市场中&#xff0c;银行业务的成功与否&#xff0c;越来越依赖于高效而精准的客户关系管理系统&#xff08;CRM&#xff09;。Zoho CRM系统不仅帮助银行提升服务质量、增强客户满意度&#xff0c;还能有效地促进业务发展和风险控制。为了帮助读者更好地理解…

蓝鹏螺纹钢测径仪的三大测量要点 纵肋 横肋 基圆

关键字:螺纹钢测径仪,螺纹钢纵肋测量,螺纹钢横肋测量,纵肋间隙测量,横肋间隙测量,螺纹钢基圆测量, 螺纹钢测径仪在测量螺纹钢时&#xff0c;主要关注纵肋、横肋和基圆这三大要点。以下是针对这三个方面的详细测量要点&#xff1a; 一、纵肋的测量要点 纵肋是螺纹钢表面上的凹陷…

Ktor快速上手1 - 第一个服务端项目

Ktor 快速上手 第一个APP 工程创建 首先你需要创建一个Ktor工程&#xff0c;这里有两种办法创建&#xff1a; 网页创建后下载包到本地&#xff0c;作为工程打开&#xff1a;Ktor: Project Generator直接在IDEA里面创建Ktor工程 为了方便操作&#xff0c;这里直接在IDEA里面…

SpringAOP学习

面向切面编程&#xff0c;指导开发者如何组织程序结构 增强原始设计的功能 oop:面向对象编程 1.导入aop相关坐标&#xff0c;创建 <!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spri…

数学建模研赛总结

目录 前言进度问题四分析问题五分析数模论文经验分享总结 前言 本文为博主数学建模比赛第五天的内容记录&#xff0c;希望所写的一些内容能够对大家有所帮助&#xff0c;不足之处欢迎大家批评指正&#x1f91d;&#x1f91d;&#x1f91d; 进度 今天已经是最后一天了&#xf…

MySQL 慢查询日志:洞察性能瓶颈的利器

在 MySQL 数据库的管理和优化中&#xff0c;慢查询日志是一个非常有用的工具。它可以帮助我们找出执行时间较长的查询语句&#xff0c;从而针对性地进行优化&#xff0c;提高数据库的性能。那么&#xff0c;什么是 MySQL 的慢查询日志呢&#xff1f;又该如何配置和使用它呢&…

广西容县霞烟鸡,品牌兴农,助力乡村振兴!

在两广与港澳地区,流传着一句深入人心的饮食谚语——“无鸡不成宴”,它不仅是一种习俗的体现,更是对餐桌礼仪与待客之道的深刻诠释。每逢家宴欢聚、祭祖庆典或盛宴宾客,一只精心烹制的鸡总是不可或缺的主角,其缺席往往被视为对宾客的不敬。在这片美食文化的沃土上,广西容县的霞…

spark-sql建表数据同步到hive

1、基础环境 组件版本备注hadoop3.4.0官方下载hive3.1.3自编译sparkspark-3.5.3-bin-hadoop3官方下载&#xff0c;需要内置hive的jar相关内容paimon0.9.0Maven官方下载jdk1.8.0_41maven3.9.6固定版本 2、停止服务、清理日志 先停止&#xff0c;清理数据 sudo kill -9 $(ps -ef…

kafka 换盘重平衡副本 操作流程

一、起因 kakfa某块数据盘损坏&#xff0c;且数据无法恢复&#xff0c;需清空换新盘 二、梳理操作流程 查看topic信息 sh ./kafka-topics --bootstrap-server ***:9092 --list --exclude-internal 查看某个topic数据分布情况 sh ./kafka-topics --bootstrap-server ***:…

vscode+stfp插件,实现远程自动同步文件代码

概述 远程同步代码&#xff0c;将本地代码实时保存到同一局域网内的另一台电脑&#xff08;linux系统&#xff09;&#xff0c;这里的本地代码也可以是远程服务上的代码&#xff0c;即从一个远程ip同步到另一台远程ip服务器。 工具 vscode&#xff0c;SFTP插件 安装 vscod…